Функция Pygame Clock возвращает странное значение - PullRequest
0 голосов
/ 16 января 2012

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

Мой код:

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 Ответ

0 голосов
/ 21 января 2012

Я думаю, что частью проблемы может быть усечение от деления на «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, поэтому вы вообще редко получаете число.

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

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