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!
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 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:
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()
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0
