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

2023-11-27

So basically ive been hoping it would be possible to effectively turn your sprite while moving it around with WASD. Any ideas because im certainly stumped, thanks!


See 如何使用 PyGame 围绕图像中心旋转图像?用于旋转表面。如果您想围绕中心点 (cx, cy)你可以这样做:

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

Use pygame.math.Vector2 to store the position and the direction of movement. Change the position by the current direction when w respectively s is pressed. Change the angle of the direction vector with rotate_ip, when a respectively d is pressed:

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)

也可以看看:

  • 运动与运动
  • 移动时图像旋转

Minimal example: 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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在使用按键移动时在 pygame 中转动精灵 的相关文章

随机推荐