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

前端 未结 1 1670
别跟我提以往
别跟我提以往 2020-12-22 00:21

So basically ive been hoping it would be possible to effectively turn your sprite while moving it around with WASD. Any ideas bec

相关标签:
1条回答
  • 2020-12-22 00:56

    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()
    
    0 讨论(0)
提交回复
热议问题