你好,我来这里是因为我有一个问题,我正在学习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
我想在类里面改变图像的角度,但我不能。
最佳答案
将原始(未旋转)图像存储在类中,并将汽车的位置存储在 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 时,则必须将向量添加到 self.pos
:
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
旋转图像并更新矩形。另请参阅How do I rotate an image around its center using Pygame? :
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
的完整代码:
class Car(pygame.sprite.Sprite):
def __init__(self, surf, x, y, speed, angle):
super().__init__()
self.surf = surf
self.surf.set_colorkey(black)
self.pos = pygame.math.Vector2(x, y)
self.angle = angle
self.speed = speed
self.image = pygame.transform.rotate(self.surf, self.angle)
self.rect = self.image.get_rect(center=(x, y))
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_a]:
self.angle -= 10
elif keys[pygame.K_d]:
self.angle += 10
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
if self.pos.x > 800:
self.pos.x = 0
elif self.pos.x < 0:
self.pos.x = 800
elif self.pos.y > 600:
self.pos.y = 0
elif self.pos.y < 0:
self.pos.y = 600
self.image = pygame.transform.rotate(self.surf, -self.angle)
self.rect = self.image.get_rect(center = (round(self.pos.x), round(self.pos.y)))
另请参阅How to turn the sprite in pygame while moving with the keys
关于python - 移动时图像旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226587/