Python3.4Pygame:基于方向更改精灵图像的问题

2024-05-18 18:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我被困在试图改变屏幕上的精灵(当向上移动时)到精灵的背面视图。在

目前,精灵只是在最近的x和y坐标下,每次按键时都会以白色背景闪烁,而不是在屏幕上流畅地移动(我想在设定的轨迹上持续移动精灵,基于箭头键的按下,就像在snake中一样)。在

这是我第一次尝试用python编写任何东西,所以如果可能的话,就用Leyman的术语!在

lead_x_change = 0
lead_y_change = 0

while not gameExit:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                lead_x_change = -5
            if event.key == pygame.K_RIGHT:
                lead_x_change = 5
    #above are two snips of code to show the method i'm using to move the sprite 

            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT or event.key == pygame.K_DOWN:
                gameDisplay.fill(white)
                gameDisplay.blit(spriteX,(lead_x,lead_y))
                pygame.display.update()
            if event.key == pygame.K_UP:
                gameDisplay.fill(white)
                gameDisplay.blit(spriteY,(lead_x,lead_y))
                pygame.display.update()

    lead_y += lead_y_change        
    lead_x += lead_x_change
    clock.tick(60)

pygame.quit()
quit()

Tags: thetokeyrighteventif屏幕type
2条回答

我认为有两种可行的方法可以根据你移动的方向改变你的精灵。在

首先,让我们修复当前的绘图逻辑,这样无论按什么键都可以绘制精灵:

while not gameExit:
    for event in pygame.event.get(): # event loop handles setting player speed
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                lead_x_change = -5
            if event.key == pygame.K_RIGHT:
                lead_x_change = 5

    lead_y += lead_y_change  # update logic moves the position
    lead_x += lead_x_change

    gameDisplay.fill(white)  # draw logic draws the background and the sprite
    gameDisplay.blit(spriteX,(lead_x,lead_y))
    pygame.display.update()

    clock.tick(60)

精灵的方法是在更改速度的同一个地方(在事件代码中)更改它,然后在实际绘制场景时使用已更改的精灵。在

^{pr2}$

第二种方法是将事件代码限制为只设置速度,然后检查已设置的速度以选择要绘制的精灵。在

player_sprite = spriteX

while not gameExit:
    for event in pygame.event.get(): # event loop handles setting speed only
        if event.type == pygame.QUIT:
            gameExit = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                lead_x_change = -5
            if event.key == pygame.K_UP:
                lead_y_change = -5

    lead_y += lead_y_change  # update logic moves the position
    lead_x += lead_x_change

    if lead_y_change < 0:    # set sprite based on speed
        player_sprite = spriteY
    else:
        player_sprite = spriteX

    gameDisplay.fill(white)  # draw logic draws the background and the sprite
    gameDisplay.blit(player_sprite,(lead_x,lead_y))
    pygame.display.update()

    clock.tick(60)

对于只有几个不同精灵的非常简单的逻辑,事件驱动的精灵变更可能是最简单的。如果你想要动画或者其他更复杂的精灵改变行为,第二种方法可能更好,因为你可以在一个地方处理所有的精灵逻辑。在

相关问题 更多 >

    热门问题