簡體   English   中英

旋轉方向與角度不一樣

[英]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) 

另請參閱如何使用 PyGame 圍繞其中心旋轉圖像?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM