[英]Direction of the rotation not the same as the angle
直升机应该按角度1飞行。当按下一个键时,它应该按角度2飞行。它正在工作。 角度 1 = 0 时,直升机平行于 x 轴飞行。 直升机图像也显示了这一点。 角度 2 = 45 时,它沿对角线向下。 但是图片显示是斜向上的。 如何调和角度和图像旋转?
import pygame, sys
import random
import math
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((1000,600))
class Helikopter(pygame.sprite.Sprite):
def __init__(self,x,y,speed,angle1,angle2):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load("Bilder/heli1.png").convert_alpha()
self.img = pygame.transform.scale(self.image,(160,60))
self.rect = self.img.get_rect()
self.rect.center=(x,y)
self.rot1 = angle1
self.rot2 = angle2
self.angle1 = math.radians(angle1)
self.angle2 = math.radians(angle2)
self.rot = self.rot1
self.angle = self.angle1
self.speed = speed
self.absturz = False
def update(self):
if self.rect.x > 1000 or self.rect.y > 600:
self.rect.x = - 20
self.rect.y = random.randrange(100,300)
self.absturz = False
self.rot = self.rot1
self.angle = self.angle1
if self.absturz == True:
self.angle = self.angle2
self.rot = self.rot2 - 45
else:
self.absturz = False
self.rect.center=calculate_new_xy(self.rect.center,self.speed,self.angle)
self.image = pygame.transform.rotate(self.img, self.rot)
def calculate_new_xy(old_xy,speed,angle_in_radians):
new_x = old_xy[0] + (speed*math.cos(angle_in_radians))
new_y = old_xy[1] + (speed*math.sin(angle_in_radians))
return new_x, new_y
heli = Helikopter(300,100,3,30,60)
alle_sprites = pygame.sprite.Group()
heli_sprites = pygame.sprite.Group()
heli = Helikopter(300,100,3,0,90)
heli_sprites.add(heli)
alle_sprites.add(heli)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
heli.absturz = True
screen.fill((250,250,250))
alle_sprites.update()
alle_sprites.draw(screen)
pygame.display.flip()
clock.tick(60)
在 Pygame 坐标系中,y 轴指向屏幕下方,但数学 y 轴指向从底部到顶部。 为了补偿您必须在调用pygame.transform.rotate
时反转旋转角度:
self.image = pygame.transform.rotate(self.img, self.rot)
self.image = pygame.transform.rotate(self.img, -self.rot)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.