问题
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!
回答1:
See How do I rotate an image around its center using PyGame? for rotating a surface. If you want to rotate an image around a center point (cx, cy) you can just do that:
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)
See also:
- Motion and movement
- Image rotation while moving
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()
来源:https://stackoverflow.com/questions/64792467/how-to-turn-the-sprite-in-pygame-while-moving-with-the-keys