您好,我在这里是因为遇到问题,我正在学习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
我想在课堂上更改图像的角度,但是我不能。
答案 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]
应该这样做。