移动时图像旋转

时间:2019-07-26 20:21:50

标签: python python-3.x pygame

您好,我在这里是因为遇到问题,我正在学习pygame,但是我的游戏在移动时无法改变旋转。

使用向量无济于事。

 class Car(pygame.sprite.Sprite):
    def __init__(self, surf, x, y, speed, angle):
        super().__init__()
        self.image = pygame.transform.rotate(surf, angle).convert()
        self.rect = self.image.get_rect(center=(x, y))
        self.x = x
        self.y = y
        self.angel=angle
        self.speed = speed
        self.image.set_colorkey(black)
    def update(self):
        if self.rect.x  > 800:
            self.rect.x=0
        elif self.rect.x <0:
            self.rect.x=800
        elif self.rect.y > 600:
            self.rect.y=0
        elif self.rect.y <0:
            self.rect.y=600
        keys = pygame.key.get_pressed()
        if keys[pygame.K_w]:
            self.rect = self.rect.move(0, -self.speed)
        elif keys[pygame.K_s]:
            self.rect = self.rect.move(0, self.speed)
        elif keys[pygame.K_a]:
            self.rect = self.rect.move(-self.speed, 0)
            self.angel +=10
        elif keys[pygame.K_d]:
            self.rect = self.rect.move(self.speed, 0)
            self.angel -=10

我想在课堂上更改图像的角度,但是我不能。

2 个答案:

答案 0 :(得分:1)

将原始(未旋转的)图像存储在类中,并将汽车的位置存储在pygame.math.Vector2对象中:

def __init__(self, surf, x, y, speed, angle):
    # [...]
    self.surf = surf.convert()
    self.surf.set_colorkey(black)
    self.pos = pygame.math.Vector2(x, y)
    # [...]

根据方向更改汽车的位置。方向矢量由self.speed设置(沿y方向),并且必须旋转self.angle。请注意,{.rotate())沿逆时针方向旋转。 y轴指向下方,因此当按下 w 时,必须减去向量,而当按下 s 时,必须将向量添加到{{ 1}}:

self.pos

旋转图像并更新矩形。另请参见How do I rotate an image around its center using Pygame?

def update(self):

    # [...]

    dirvec = pygame.math.Vector2(0, self.speed).rotate(self.angle)

    if keys[pygame.K_w]:
        self.pos = self.pos - dirvec
    elif keys[pygame.K_s]:
        self.pos = self.pos + dirvec


def update(self): # [...] self.image = pygame.transform.rotate(self.surf, -self.angle) self.rect = self.image.get_rect(center = (round(self.pos.x), round(self.pos.y))) 类的完整代码:

Car

答案 1 :(得分:0)

使这些位:

elif keys[pygame.K_a]
elif keys[pygame.K_d]

进入:

if keys[pygame.K_a]
elif keys[pygame.K_d]

应该这样做。

相关问题