2012-01-16 3 views
0

В принципе, я хотел вернуться в Python, поэтому решил сделать небольшую игру в pygame, где есть прыгающий шар, который вам нужно держать подпрыгивая в воздухе. Проблема в том, что когда я использую функции clock.tick() и clock.get_time(), get_time должен вернуть время, прошедшее в миллисекундах, но оно проходит время в миллисекундах * 10.Функция часов Pygame возвращает странное значение

Мой код:

GRAVITY = 10 

def move(self, delta): 
    self.x+= (self.vx * delta) 
    self.y+= (self.vy * delta) 

def speed(self, delta): 
    self.vy += (GRAVITY * delta) 

clock.tick() 

while True: 
    clock.tick() 
    delta = (clock.get_time()/100) #should be /1000 
    ball.move(delta) 
    ball.speed(delta) 

Он работает плавно, как и в реальном мире, когда его/100, но работает очень медленно, то его/1000.

+1

Try с помощью 'clock.get_ticks', которые следует использовать милли. Это также следует учитывать в документах pygame: «Таймы в pygame представлены в миллисекундах (1/1000 секунд). Большинство платформ имеют ограниченное временное разрешение около 10 миллисекунд. Это разрешение в миллисекундах дается в константе TIMER_RESOLUTION. ' – TyrantWave

ответ

0

Я думаю, что часть проблемы может быть усечением от деления на «1000» вместо «1000,0». Вы можете проверить clock.tick работает с этим:

import pygame 
pygame.init() 
i = 0 
clock = pygame.time.Clock() 
while i < 10: # Just run a few cycles to check the output 
    res = clock.tick(1) # Caps framerate to 1 fps 
    print res # This should print out 1000 
    i += 1 

Обратите внимание, что clock.tick уже возвращает дельта и обычно используется в довершение фреймрейт. Если вы останетесь без изменений, у вас может быть действительно высокий FPS, дающий небольшую дельта и, если он разделен на int, не больше 1, поэтому вы редко получаете число вообще.

Кроме того, убедитесь, что у вас есть все ваши юниты правильно, что вы действительно хотите, чтобы преобразовать в секунды

Смежные вопросы