如何在使用按键移动时在 pygame 中转动精灵

How to turn the sprite in pygame while moving with the keys

所以基本上我一直希望可以在使用 WA[=13= 移动精灵时有效地转动它]SD。任何想法,因为我肯定被难住了,谢谢!

参见 How do I rotate an image around its center using PyGame? 旋转表面。如果你想围绕中心点旋转图像(cxcy)你可以这样做:

rotated_car = pygame.transform.rotate(car, angle)
window.blit(rotated_car, rotated_car.get_rect(center = (cx, cy))

使用pygame.math.Vector2存储运动的positiondirection。当分别按下 ws 时,将 position 更改为当前的 direction。当a分别按下d时,用rotate_ip改变direction向量的角度:

keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
    position += direction
if keys[pygame.K_s]:
    position -= direction
if keys[pygame.K_a]:
    direction.rotate_ip(-1)
if keys[pygame.K_d]:
    direction.rotate_ip(1)

另请参阅:


最小示例: repl.it/@Rabbid76/PyGame-CarMovement

import pygame
pygame.init()
window = pygame.display.set_mode((500, 500))
clock = pygame.time.Clock()

car = pygame.image.load('CarRed64.png')
position = pygame.math.Vector2(window.get_rect().center)
direction = pygame.math.Vector2(5, 0)

run = True
while run:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        position += direction
    if keys[pygame.K_s]:
        position -= direction
    if keys[pygame.K_a]:
        direction.rotate_ip(-1)
    if keys[pygame.K_d]:
        direction.rotate_ip(1)

    window.fill(0)
    angle = direction.angle_to((1, 0))
    rotated_car = pygame.transform.rotate(car, angle)
    window.blit(rotated_car, rotated_car.get_rect(center = (round(position.x), round(position.y))))
    pygame.display.flip()

pygame.quit()
exit()