Python Pygame:如何在不按任何键的情况下使精灵朝向同一方向

Python Pygame:如何在不按任何键的情况下使精灵朝向同一方向,python,pygame,key,sprite,Python,Pygame,Key,Sprite,我的角色能够正常移动。但是,如果没有按下任何键,则会出现问题。当没有按下任何键时,精灵将朝向与上次相同的方向,如何使其如此?例如,如果我按下向上键,它将面朝上,然后当我不按下任何其他键时,它仍将面朝上?其他方向也一样。还有,当第一次启动游戏时,我将如何显示我的角色?就像,我的角色只在按下某个键时显示,而在不按下时保持不可见 这是我的密码: 精灵: # Protagonist Sprites protagR = [pygame.image.load("ASG2_Graphics/JoArrow_R

我的角色能够正常移动。但是,如果没有按下任何键,则会出现问题。当没有按下任何键时,精灵将朝向与上次相同的方向,如何使其如此?例如,如果我按下向上键,它将面朝上,然后当我不按下任何其他键时,它仍将面朝上?其他方向也一样。还有,当第一次启动游戏时,我将如何显示我的角色?就像,我的角色只在按下某个键时显示,而在不按下时保持不可见

这是我的密码:

精灵:

# Protagonist Sprites
protagR = [pygame.image.load("ASG2_Graphics/JoArrow_R1_1.png"), pygame.image.load("ASG2_Graphics/JoArrow_R1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_R1_3.png"), pygame.image.load("ASG2_Graphics/JoArrow_R1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_R1_1.png")]
protagL = [pygame.image.load("ASG2_Graphics/JoArrow_L1_1.png"), pygame.image.load("ASG2_Graphics/JoArrow_L1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_L1_3.png"), pygame.image.load("ASG2_Graphics/JoArrow_L1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_L1_1.png")]
protagU = [pygame.image.load("ASG2_Graphics/JoArrow_U1_1.png"), pygame.image.load("ASG2_Graphics/JoArrow_U1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_U1_3.png"), pygame.image.load("ASG2_Graphics/JoArrow_U1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_U1_1.png")]
protagD = [pygame.image.load("ASG2_Graphics/JoArrow_D1_1.png"), pygame.image.load("ASG2_Graphics/JoArrow_D1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_D1_3.png"), pygame.image.load("ASG2_Graphics/JoArrow_D1_2.png"), pygame.image.load("ASG2_Graphics/JoArrow_D1_1.png")]
# Bullet Sprites
bulletsP = [pygame.image.load("ASG2_Graphics/Bullet_1.png"), pygame.image.load("ASG2_Graphics/Bullet_2.png"), pygame.image.load("ASG2_Graphics/Bullet_3.png"), pygame.image.load("ASG2_Graphics/Bullet_4.png")]
bulletsE = [pygame.image.load("ASG2_Graphics/E_Bullet_1.png"), pygame.image.load("ASG2_Graphics/E_Bullet_2.png"), pygame.image.load("ASG2_Graphics/E_Bullet_3.png")]
# Enemy Sprites
enemyR = [pygame.image.load("ASG2_Graphics/Enemy_R1_1.png"), pygame.image.load("ASG2_Graphics/Enemy_R1_2.png"), pygame.image.load("ASG2_Graphics/Enemy_R1_3.png"), pygame.image.load("ASG2_Graphics/Enemy_R1_4.png"), pygame.image.load("ASG2_Graphics/Enemy_R1_5.png")]
enemyL = [pygame.image.load("ASG2_Graphics/Enemy_L1_1.png"), pygame.image.load("ASG2_Graphics/Enemy_L1_2.png"), pygame.image.load("ASG2_Graphics/Enemy_L1_3.png"), pygame.image.load("ASG2_Graphics/Enemy_L1_4.png"), pygame.image.load("ASG2_Graphics/Enemy_L1_5.png")]
enemyU = [pygame.image.load("ASG2_Graphics/Enemy_U1_1.png"), pygame.image.load("ASG2_Graphics/Enemy_U1_2.png"), pygame.image.load("ASG2_Graphics/Enemy_U1_3.png"), pygame.image.load("ASG2_Graphics/Enemy_U1_4.png"), pygame.image.load("ASG2_Graphics/Enemy_U1_5.png")]
enemyD = [pygame.image.load("ASG2_Graphics/Enemy_D1_1.png"), pygame.image.load("ASG2_Graphics/Enemy_D1_2.png"), pygame.image.load("ASG2_Graphics/Enemy_D1_3.png"), pygame.image.load("ASG2_Graphics/Enemy_D1_4.png"), pygame.image.load("ASG2_Graphics/Enemy_D1_5.png")]
# Background Sprite
bg = pygame.image.load("Star_Crusaders_MAP.png")
main()

类播放器():

movePlayer()


如您所见,我尝试使用currentSprite()变量和stillSprite()函数来存储最后一次按下的键,但没有效果。在此方面的任何帮助都将不胜感激,谢谢。

问题是,当按键松开时,状态
board.left
board.right
board.up
board.down
将重置,因为移动必须停止。因为图像应该保持方向,所以该状态不能用于该要求。您必须添加一个附加状态

说明属性中最后按下的键(例如:
board.last_键
):

arrowKeys=pygame.key.get_pressed()
如果箭头键[pygame.K_LEFT]和board.x>25+board.vel:
board.x-=board.vel
board.left,board.right,board.up,board.down=真,假,假,假
board.last_key=pygame.K_左
elif箭头键[pygame.K_RIGHT]和board.x<510-board.width-board.vel:
board.x+=board.vel
board.left,board.right,board.up,board.down=假,真,假,假
board.last_key=pygame.K_RIGHT
elif箭头键[pygame.K_UP]和board.y>40+board.vel:
board.y-=board.vel
board.left,board.right,board.up,board.down=假,假,真,假
board.last_key=pygame.K_UP
elif箭头键[pygame.K_DOWN]和board.y<450-board.height-board.vel:
board.y+=board.vel
board.left,board.right,board.up,board.down=假,假,假,真
board.last_key=pygame.K_DOWN
elif arrowKeys[pygame.K_ESCAPE]:#ESC键
停止游戏
其他:
board.left,board.right,board.up,board.down=假,假,假,假
board.walkCount=0
根据
电路板选择图像。最后一个\u键

def重画游戏窗口(板):
窗位(bg,(0,0))
dest=(board.x,board.y)
如果board.walkCount+1>=30:
board.walkCount=0
如果board.last_key==pygame.K_LEFT:
window.blit(protagL[0],dest)
#currentSprite=protagL[0]
elif board.last_key==pygame.K_RIGHT:
window.blit(protagR[0],dest)
#currentSprite=protagR[0]
elif board.last_key==pygame.K_UP:
window.blit(protagU[0],dest)
#currentSprite=protagU[0]
elif board.last_key==pygame.K_DOWN:
window.blit(protagD[0],dest)
#currentSprite=protagD[0]
#静物精灵(当前精灵,板)
pygame.display.update()

可能会删除
其他:
在其中,您为所有方向设置了
False
board.left
board.up
board.down
啊,很抱歉更新太晚,我实际上解决了这个问题,忘记更新这篇文章了。是我的错。事情是这样的:我最终使用了与您给出的方法非常相似的方法,但我没有使用last_键,而是使用了一个名为last_direction的变量。非常感谢您的帮助!为您干杯,好先生/女士
def main():
    board = player(30, 45, 64, 64, 0)
    while True:
        movePlayer(board) 
class player():
    def __init__(self, x, y, width, height, walkCount):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.vel = 5
        self.up = False
        self.down = False
        self.left = False
        self.right = False
        self.up = False
        self.down = False
        self.walkCount = walkCount
    def movePlayer(board):
        clock = pygame.time.Clock()
        run = True

        while run:
            clock.tick(15)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False

            arrowKeys = pygame.key.get_pressed()
            if arrowKeys[pygame.K_LEFT] and board.x > 25 + board.vel:
                board.x -= board.vel
                board.left = True
                board.right = False
                board.up = False
                board.down = False
            elif arrowKeys[pygame.K_RIGHT] and board.x < 485 - board.width - board.vel:
                board.x += board.vel
                board.right = True
                board.left = False
                board.up = False
                board.down = False
            elif arrowKeys[pygame.K_UP] and board.y > 40 + board.vel:
                board.y -= board.vel
                board.right = False
                board.left = False
                board.up = True
                board.down = False
            elif arrowKeys[pygame.K_DOWN] and board.y < 450 - board.height - board.vel:
                board.y += board.vel
                board.right = False
                board.left = False
                board.up = False
                board.down = True
            elif arrowKeys[pygame.K_ESCAPE]:  # ESC key
                stopGame()
            else:
                board.right = False
                board.left = False
                board.up = False
                board.down = False
                board.walkCount = 0

            redrawGameWindow(board)
def redrawGameWindow(board):
    window.blit(bg, (0,0))
    dest = (board.x, board.y)

    if board.walkCount + 1 >= 30:
        board.walkCount = 0
    if board.left:
        window.blit(protagL[0], dest)
        # currentSprite = protagL[0]
    elif board.right:
        window.blit(protagR[0], dest)
        # currentSprite = protagR[0]
    elif board.up:
        window.blit(protagU[0], dest)
        # currentSprite = protagU[0]
    elif board.down:
        window.blit(protagD[0], dest)
        # currentSprite = protagD[0]
    # stillSprite(currentSprite, board)
    pygame.display.update()