【问题标题】:How to Turn a Car around to face the opposite direction on key press in PyGame如何在 PyGame 中按下按键时将汽车转向相反的方向
【发布时间】:2022-08-06 02:53:43
【问题描述】:

如何在PyGame 中通过按键使汽车转向相反的方向

我正在制作一个游戏,其中汽车将避开道路上的物体​​,并且我希望汽车能够在我按下特定键时转向并面向相反的方向(不仅仅是向左、向右、向上和向下移动)但能够转身并面对我希望它面对的任何特定位置。

import turtle
import pygame
import os

WHITE = (255, 255, 255)

BACKGROUND_WIDTH, BACKGROUND_HEIGHT = 900, 500
WIN = pygame.display.set_mode((BACKGROUND_WIDTH, BACKGROUND_HEIGHT))
pygame.display.set_caption(\"Avoid Obstacles\")

ROAD_IMAGE = pygame.image.load(
 os.path.join(\"Assets\", \"road.png\"))

CAR_IMAGE = pygame.image.load(
 os.path.join(\"Assets\", \"carone.png\"))
VELOCITY = 3.2


class Cars:

   def __init__(self, x, y, car_width, car_height, car_image, turning):
     self.x = x
     self.y = y
     self.car_width = car_width
     self.car_height = car_height
     self.car_image = car_image
     self.turning = turning

     # handles the drawing and resizing of images
     def draw_window(self, car):
        pygame.transform.flip(CAR_IMAGE, True, False)

        CAR_ONE = pygame.transform.scale(
        self.car_image, (self.car_width, self.car_height))
        WIN.fill(WHITE)

        WIN.blit(pygame.transform.scale(
         ROAD_IMAGE, (BACKGROUND_WIDTH, BACKGROUND_HEIGHT)), (0, 0))
        WIN.blit(CAR_ONE, (car.x, car.y))
        pygame.display.update()

     # handles car movements when keys are pressed
     def handles_car_movement(self, keys_pressed, car):
        if(keys_pressed[pygame.K_LEFT]):  # Turn LEFT KEY
          car.x -= self.turning

        if(keys_pressed[pygame.K_RIGHT]):  # Turn RIGHT KEY
          car.x += self.turning
        # handes the storing and manipulating of rectangular areas, proccessing and 
     function calls

     def main(self):
        clock = pygame.time.Clock()

        carWithPosition = pygame.Rect(
         self.x, self.y, self.car_width, self.car_height)

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

            keys_pressed = pygame.key.get_pressed()
            self.handles_car_movement(keys_pressed, carWithPosition)
            if event.type == pygame.QUIT:
                run = False
        self.draw_window(carWithPosition)
    pygame.quit()


cars = Cars(500, 300, 55, 40, CAR_IMAGE, 5)

if(__name__ == \"__main__\"):
  cars.main()

    标签: python pygame


    【解决方案1】:

    pygame.transform.flip 不会翻转图像本身,而是返回一个新的翻转图像。例如。:

    pygame.transform.flip(CAR_IMAGE, True, False)

    CAR_IMAGE = pygame.transform.flip(self.car_image, True, False)
    

    为每个护理创建 2 个图像(例如:slef.CAR_LEFTself.CAR_RGIHT)并将第一个方向的图像分配给属性 self.CAR_ONE。按下按钮时更改图像:

    class Cars:
    
        def __init__(self, x, y, car_width, car_height, car_image, turning):
            self.x = x
            self.y = y
            self.car_width = car_width
            self.car_height = car_height
            self.car_image = car_image
    
            self.CAR_RIGHT = pygame.transform.scale(self.car_image, (self.car_width,  self.car_height))
            self.CAR_LEFT = pygame.transform.flip(self.CAR_RIGHT, True, False)
            self.CAR_ONE = self.CAR_RIGHT 
    
        def draw_window(self, car):
            
            WIN.blit(pygame.transform.scale(ROAD_IMAGE, (BACKGROUND_WIDTH, BACKGROUND_HEIGHT)), (0, 0))
            WIN.blit(self.CAR_ONE, (car.x, car.y))
            pygame.display.update()
    
        def handles_car_movement(self, keys_pressed, car):
            if(keys_pressed[pygame.K_LEFT]):  # Turn LEFT KEY
                car.x -= self.turning
                car.CAR_ONE = car.CAR_LEFT
    
            if(keys_pressed[pygame.K_RIGHT]):  # Turn RIGHT KEY
                car.x += self.turning    
                car.CAR_ONE = car.CAR_RIGHT
    

    【讨论】:

      【解决方案2】:

      与其在转弯时更改 x 位置,不如尝试让汽车旋转并根据使用 Trig 移动它的位置。如:

      def handles_car_movement(self, keys_pressed, car):
          if(keys_pressed[pygame.K_LEFT]):  # Turn LEFT KEY
            car.rotation -= self.turning 
      
          if(keys_pressed[pygame.K_RIGHT]):  # Turn RIGHT KEY
            car.rotation += self.turning
      
        car.x += cos(car.rotation)
      

      并在您的draw_window 中以适当的旋转方式渲染汽车 (我相信类似的东西:)

      CAR_ONE = pygame.transform.rotate(self.car_image, self.rotation)
      

      确保弧度和度数之间保持一致

      【讨论】:

      • 汽车只有 2 个可能的方向(左和右)。可以使用pygame.transform.flip 转动 pygame 表面。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多