Pygame time.clock () странное поведение - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь создать простую игру, используя pygame, и пока все было хорошо. Последние пару дней я понял, что возникла проблема с time.clock (). Я прочитал документацию и функция должна считать время игры с момента ее запуска. Я хотел порождать инопланетную группу каждые 8 ​​секунд, и это сработало (я работаю над Debian OS), но, как я упоминал последние 2 дня, это не считается должным образом. Системе нужно около 20 секунд в реальном времени для того, чтобы time.clock напечатал 8.0 и пришельцев появиться, и сначала я подумал, что перепутал счетчики, но как это может быть, Сначала все работало нормально, поэтому я попытался запустить тот же код на разделе Windows, и это было тоже хорошо. Так это проблема с системными часами или что-то еще? Я заменил time.clock в Debian на time.time и тоже работал нормально. Кто-нибудь в прошлом сталкивался с такой же проблемой? Можете ли вы помочь мне проверить, не является ли проблема еще чем-то (обе операционные системы работают на Python 3.6)? Если вы чего-то не понимаете или вам что-то нужно, просто спросите меня.

Спасибо за ваше время

Вот часть времени, использованного в игре.

sergeant_spawn_time_limit = 8.0
sergeant_spawn_time = 0.0
if game_stage == 2 or game_stage == 3 or score >= 400:
    if time.clock() - sergeant_spawn_time > sergeant_spawn_time_limit:
        for spawn_sergeant in range(5):
            sergeant = AlienSergeant(display_width, display_height, 50, 88)
            all_sprites_list.add(sergeant)
            alien_sergeant_list.add(sergeant)
        sergeant_spawn_time = time.clock()

1 Ответ

0 голосов
/ 04 ноября 2018

Поведение time.clock() зависит от платформы:

time.clock ()
В Unix верните текущее время процессора в виде числа с плавающей запятой, выраженного в секундах. Точность, и на самом деле само определение значения «процессорного времени» зависит от что из функции C с тем же именем.

В Windows эта функция возвращает часы настенных часов, прошедшие с момента первый вызов этой функции, как число с плавающей запятой, на основе Win32 функция QueryPerformanceCounter (). Разрешение обычно лучше, чем одна микросекунда.

Устаревший с версии 3.3: поведение этой функции зависит на платформе: используйте perf_counter () или process_time () вместо этого, в зависимости от ваших требований иметь четко определенное поведение.

Так что это действительно неправильный инструмент для использования здесь. Либо используйте time.time(), либо часы Pygame, либо встроенную систему событий. Вы найдете множество примеров, например здесь или здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...