游戏延迟 - 障碍物创造错误

时间:2015-07-31 23:59:06

标签: python pygame

我对这个简单的游戏有一个问题,那就是障碍创造让游戏变得非常糟糕,并且变成红色条纹而不是单个立方体:

import pygame
import random

pygame.init()

white = (225, 225, 225)
black = (0,0,0)
red = (225,0,0)
blue = (0,0,225)

clock = pygame.time.Clock()
millisToEvent = random.randint(500, 2001)
millisFromEvent = 0

gameDisplay = pygame.display.set_mode((300, 300))
pygame.display.set_caption("Jumpy!")

exitGame = False

touchingGround = False

Y = 180;
YV = 1;
obX = 300

grounded = True

fps = 200

def createObstacle(obX):
    obX = 300
    pygame.time.wait(random.randrange(200, 1600))
    while obX > -19:
        obX -= 0.1
        gameDisplay.fill(red, rect = [obX, 180, 20, 20])
        pygame.display.update()

while not exitGame:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exitGame = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                if grounded == True:
                    YV -= 3
                    Y += YV

    if Y <= 180:
        YV += 0.1
        Y += YV
        grounded = False
    else:
        YV = -0.1
        grounded = True

    gameDisplay.fill(white)
    gameDisplay.fill(blue, rect = [50, Y, 20, 20])
    gameDisplay.fill(black, rect = [0, 200, 300, 100])
    pygame.display.update()

    millisFromEvent += clock.tick(fps)

    if millisFromEvent > millisToEvent:
        createObstacle(obX)
        millisToEvent = random.randint(500, 2001)
        millisFromEvent = 0

    createObstacle(obX)

    clock.tick(fps)

pygame.quit()
quit()

你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

很明显,你似乎认为你有多个线程正在进行,但是当你调用createObstacle时,它不会将控制权返回给主循环,直到它完成运行。您需要每帧在正确的位置绘制框,而不是每帧的所有位置。

要修复延迟,请删除此行pygame.time.wait(random.randrange(200, 1600)),将fps设置为合理的值,例如60而不是200.此外,不要每帧多次调用display.update作为整个屏幕。你可以在clock.tick(fps)之前调用一次。这也适用于clock.tick,每个循环只有一次。

遵循教程并检查(播放和修改!)包含的示例可能是个好主意。

相关问题