移动时图像旋转 [英] Image rotation while moving
问题描述
您好,我在这里是因为我遇到了问题,我正在学习 pygame
但我的游戏在移动时无法改变旋转.
使用矢量没有帮助.
类汽车(pygame.sprite.Sprite):def __init__(自我,冲浪,x,y,速度,角度):super().__init__()self.image = pygame.transform.rotate(surf, angle).convert()self.rect = self.image.get_rect(center=(x, y))自我.x = x自我.y = yself.angel=角度self.speed = 速度self.image.set_colorkey(黑色)定义更新(自我):如果 self.rect.x >800:self.rect.x=0elif self.rect.x <0:self.rect.x=800elif self.rect.y >600:self.rect.y=0elif self.rect.y <0:self.rect.y=600键 = pygame.key.get_pressed()如果键[pygame.K_w]:self.rect = self.rect.move(0, -self.speed)elif 键 [pygame.K_s]:self.rect = self.rect.move(0, self.speed)elif 键 [pygame.K_a]:self.rect = self.rect.move(-self.speed, 0)self.angel +=10elif 键 [pygame.K_d]:self.rect = self.rect.move(self.speed, 0)self.angel -=10
我想在课堂上改变图像的角度,但我不能.
将原始(未旋转)图像存储在类中,并将汽车的位置存储在
class Car(pygame.sprite.Sprite):def __init__(自我,冲浪,x,y,速度,角度):super().__init__()self.surf = 冲浪self.surf.set_colorkey(黑色)self.pos = pygame.math.Vector2(x, y)self.angle = 角度self.speed = 速度self.image = pygame.transform.rotate(self.surf, self.angle)self.rect = self.image.get_rect(center=(x, y))定义更新(自我):键 = pygame.key.get_pressed()如果键[pygame.K_a]:self.angle -= 10elif 键 [pygame.K_d]:self.angle += 10dirvec = pygame.math.Vector2(0, self.speed).rotate(self.angle)如果键[pygame.K_w]:self.pos = self.pos - dirvecelif 键 [pygame.K_s]:self.pos = self.pos + dirvec如果 self.pos.x >800:self.pos.x = 0elif self.pos.x <0:self.pos.x = 800elif self.pos.y >600:self.pos.y = 0elif self.pos.y <0:self.pos.y = 600self.image = pygame.transform.rotate(self.surf, -self.angle)self.rect = self.image.get_rect(center = (round(self.pos.x), round(self.pos.y)))
另见
Hello I am here because I have a problem, I am learning pygame
but my game cannot changes rotation while moving.
Using a vector didn't help.
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
I want to change image's angle in my class, but I can not.
Store the original (not rotated) image in the class and store the position of the car in a pygame.math.Vector2
object:
def __init__(self, surf, x, y, speed, angle):
# [...]
self.surf = surf.convert()
self.surf.set_colorkey(black)
self.pos = pygame.math.Vector2(x, y)
# [...]
Chang the position of the car dependent on the direction. The direction vector is set by self.speed
(in y direction) and has to be rotated by self.angle
. Note that (.rotate()
) rotates in counter clockwise direction. The y-axis points downwards, so when w is pressed, then the vector has to be subtracted and when s is pressed, then the vector has to be add to 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
Rotate the image and update the rectangle. See also 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)))
Full code of the class 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)))
See also How to turn the sprite in pygame while moving with the keys
这篇关于移动时图像旋转的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!