python - 在幕后 PyGame 游戏可以运行,但图像不会移动

标签 python pygame game-loop

我正在尝试制作自己的游戏。之前,汽车图像移动得非常好,但后来将我的循环放在“def”中,这样​​当汽车撞到墙上以及你获胜时,游戏就可以重新开始。现在,一切正常,只是游戏似乎没有更新到屏幕,因为汽车不会移动。游戏似乎仍然在屏幕后面运行,因为当我在没有看到汽车移动的情况下制造汽车碰撞时,它会播放碰撞部分。 PyGame 并没有说 day 是一个错误。这对我来说有点新鲜,我真的不明白问题出在哪里。 这是我的代码的一部分:

#Setting and variables
display_width = 1570
display_height = 450
car_width = 98
car_height = 66
clock = pygame.time.Clock()
wn = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('My own game')
finish_line = pygame.image.load('myOwnFinishreal.png')

carImg = pygame.image.load('myOwnRGame.png')
carY = 192
carX = 10
Xchange = 0
Ychange = 0
Xfin = 1480
Yfin = 0
carY = 192
carX = 10

#racecar
def car(x,y):
    wn.blit(carImg, (carX, carY))

#finish line
def finish():
    wn.blit(finish_line, (Xfin, Yfin))
#Crashing
def textObjects(text, font):
    textSurface = font.render(text, True, red)
    return textSurface, textSurface.get_rect()

def displayMessage(text):
    textFont1 = pygame.font.Font('freesansbold.ttf', 32)
    textSurf, textRect = textObjects(text, textFont1)
    textRect.center = ((display_width/2),(display_height/2))
    while True:
        wn.blit(textSurf, textRect)

        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_x:
                    pygame.quit()
                if event.key == pygame.K_SPACE:
                    gameLoop()
        pygame.display.update()

def crash():
    displayMessage('You crashed!Press X to quit, _SPACE_ to restart!')
def win():
    displayMessage('Bravo! You are the best car runner! Press X to quit _SPACE_ to restart.')

#Game loop
def gameLoop():
    carY = 192
    carX = 10
    Xchange = 0
    Ychange = 0

    alive = True
    losing = True
    while alive and losing:
        carX += Xchange
        carY += Ychange
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_x:
                    pygame.quit()
                if event.key == pygame.K_UP:
                    Xchange = 0
                    Ychange = 0
                    Xchange = 2.5

                elif event.key == pygame.K_LEFT:
                    Xchange = 0
                    Ychange = 0
                    time.sleep(0.85)
                    Ychange = -3

                elif event.key == pygame.K_RIGHT:
                    Xchange = 0
                    Ychange = 0
                    time.sleep(0.85)
                    Ychange = 3
                elif event.key == pygame.K_DOWN:
                    Xchange = 0
                    Ychange = 0
                    time.sleep(0.85)
                    Xchange = -3
        if carY <= -15 or carY >= display_height - 15:
            Xchange = 0
            Ychange = 0
            crash()

        if carX >= display_width:
            Xchange = 0
            Ychange = 0
            win()
        if carX <= 0:
            carX = 10

            #350 250 120 30

        wn.fill(grey)
        finish()
        carX += Xchange
        carY += Ychange
        car(carX, carY)
        pygame.display.update()
        clock.tick(60)

    pygame.quit()
gameLoop()

期待您的帮助和出价,谢谢!

最佳答案

您必须在函数中使用参数xy而不是carXcarY >汽车:

def car(x,y):
    wn.blit(carImg, (x, y))

关于python - 在幕后 PyGame 游戏可以运行,但图像不会移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61943589/

相关文章:

c++ - 问题控制游戏帧率 C++

java - 使用 ImageIcon 磁贴在 JPanel 上进行主动渲染? #Java

Python字典指针和引用指针?

python - 无法用 pickle 序列化 pygame.Surface 对象

python - 我想制作插入排序可视化工具,排序有效,但可视化工具不行

Qt & OpenGL : how to render as frequent as possible?

python - 在 Pandas 中,如何将 bool 列转换为分类列?

python - 每个唯一值采样一条记录( Pandas , python )

python - Tkinter:如何放置一个可以随意更新的文本字段?

python - 在 Pygame 中,为什么我无法使图像的一部分透明?