экран Pygame работает только когда я переместить окно за пределы экрана

Фон

Объект JavaScript Date JavaScript отслеживает время в UTC внутренне, но обычно принимает вход и выход в локальное время компьютера, на котором он запущен. У этого нет никаких средств для работы со временем в других часовых поясах. Вы можете анализировать и выводить даты, которые являются UTC или Local, но вы не можете напрямую работать с другими часовыми поясами.

Чтобы быть абсолютно точным, внутреннее представление объекта Date - это единственное число, представляя количество миллисекунд, прошедших с момента 1970-01-01 00:00:00 UTC, независимо от секунд прыжка. В объекте Date нет часового пояса или строкового формата. Когда используются различные функции объекта Date, локальный часовой пояс компьютера применяется к внутреннему представлению. Если функция выдает строку, тогда локальная информация компьютера может быть принята во внимание, чтобы определить, как создать эту строку. Информация зависит от каждой функции, а некоторые из них специфичны для реализации.

Библиотеки

К счастью, есть библиотеки, которые могут это сделать. Они реализуют стандартную базу данных о часовых поясах Olson / IANA в JavaScript. У некоторых есть накладные расходы, если вы работаете в веб-браузере, так как база данных может быть немного большой, если вы хотите все это. К счастью, многие из этих библиотек позволяют выборочно выбирать зоны, которые вы хотите поддерживать, делая размер данных более приемлемым. Некоторые из них используют современные функции для получения данных о часовых поясах из API Intl, а не для их отправки.

Для этого есть несколько библиотек:

Luxon, вероятно, является самой безопасной ставкой для всего современного использования и является самым легким весом, поскольку он использует API Intl для его данные о часовом поясе.

Момент-часовой пояс является расширением moment.js и приводит к его собственным данным часового пояса.

js-joda - это JavaScript реализация Joda-Time API (с Java) и включает поддержку часового пояса через отдельный модуль.

BigEasy / TimeZone также находится на правильном пути.

WallTime- js достиг конца жизни , а владельцы мигрируют в момент-время.

TimeZoneJS был вокруг самого длинного, но, как известно, имеют некоторые давние ошибки, особенно при переходах на летнее время. Надеюсь, они будут исправлены в какой-то момент в будущем.

tz.js также существует некоторое время, но не очень хорошо документировано, IMHO.

Вы должны оценить эти библиотеки, чтобы увидеть, что будет отвечать вашим потребностям. Если вы не уверены, перейдите с моментом / моментом-временем.

Встроенная поддержка в современных браузерах

Если вы можете ограничить свое использование в современных веб-браузерах, теперь вы можете сделать следующее без каких-либо специальных Библиотеки:

new Date().toLocaleString("en-US", {timeZone: "America/New_York"})

Это не комплексное решение, но оно работает для многих сценариев, которые требуют только преобразования вывода (от UTC или местного времени до определенного часового пояса, но не в другом направлении). Это часть API интернационализации ECMAScript (ECMA-402). Подробнее см. В этой записи . Эта таблица совместимости отслеживает, какие версии поддерживаются. Это API Intl, упомянутый выше, что некоторые библиотеки теперь используют внутренне.

2
задан Glitchd 24 February 2019 в 16:47
поделиться

1 ответ

Причина этого, скорее всего, в том, что ничто не вызывает событие повторного розыгрыша. Значение буфера никогда не обновляется. За исключением случаев, когда окно перемещается за пределы экрана, эта часть будет вызывать событие перерисовки для этой области.

Вручную добавление обновления или в конце в конце вашего времени должно вызвать обновление сцены, чтобы все снова выглядело хорошо:

import pygame, sys
from pygame.locals import *
pygame.init()

sizex = 400
sizey = 300
tilesize = 25

tile = pygame.image.load('images/tile.png')
tile = pygame.transform.scale(tile, (tilesize, tilesize))

screen = pygame.display.set_mode((sizex,sizey))

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    for row in range(sizex):
        for column in range(sizey):
            screen.blit(tile,(column*tilesize, row*tilesize,tilesize,tilesize))

    pygame.display.flip() # or pygame.display.update()
[119 ] Для тех, кто знаком с Pygame / GL и обновлениями экрана, это будет несколько обременительным. В идеальных случаях вы должны обновлять только те области, которые нуждаются в обновлениях.
Например, отслеживание того, в каких частях экрана вы переместили персонажа или какие события мыши вызвали определенные элементы на экране. И только тогда сделайте pygame.display.update(rectangle_list) с областью для обновления.

Вот хорошее описание того, что они делают, и почему использование update() может быть хорошей идеей: Разница между pygame.display.update и pygame.display.flip

0
ответ дан Torxed 24 February 2019 в 16:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: