2016-04-19 22 views
0

我正在尝试创建一个旋转炮塔。炮塔正确旋转的问题是,当我使用空格键进行炮塔射击时,子弹在每个角度的尺寸或形状都不相同。我尝试使用炮塔所面对的角度做一些三角计算,并找到创建子弹所需的两个角点(这是一个圆圈)。我已经尝试过的任何东西都可以工下面是代码:用任意角度创建一个正方形边框

Barrel = [260,210,270,210,270,170,260,170] 

def RotateBarrel(): 
    global angle 
    angleChange = 2 
    mountCenterX = 265 
    mountCenterY = 215 
    #Rotate Barrel 
    cycle = 1 
    while cycle < len(Barrel): 
     x = Barrel[cycle-1]-mountCenterX 
     y = Barrel[cycle]-mountCenterY 
     Barrel[cycle-1] = (x*math.cos(angleChange*math.pi/180)-y*math.sin(angleChange*math.pi/180))+mountCenterX 
     Barrel[cycle] = (x*math.sin(angleChange*math.pi/180)+y*math.cos(angleChange*math.pi/180))+mountCenterY 
     cycle += 2 
    angle += angleChange 
    if angle == 360: angle = 0 
    canvas.coords(barrel,Barrel) 
    self.after(1,RotateBarrel) 

def SpinningShoot(event): 
    global angle 
    speed = 10 
    shotXpos = Barrel[6]+10*(math.cos(angle*math.pi/180)) 
    shotYpos = Barrel[7]-10*(math.sin(angle*math.pi/180)) 
    cornerX = Barrel[6]+10*(math.cos((90-angle)*math.pi/180)) 
    cornerY = Barrel[7]-10*(math.sin((90-angle)*math.pi/180)) 
    shot = canvas.create_oval(shotXpos,shotYpos,cornerX,cornerY,fill="white") 
    Xmotion = speed*math.cos(angle*math.pi/180) 
    Ymotion = speed*math.sin(angle*math.pi/180) 
    Shots.append(shot) 
    ShotsPos.append(shotXpos) 
    ShotsPos.append(shotYpos) 
    ShotsMotion.append(Xmotion) 
    ShotsMotion.append(Ymotion) 

回答

0

它看起来对我说,你的镜头不会在“桶”为中心,但使用计算(90角)是想给你的一个角宽度(90 - - 角)

角的镜头

其是2 *角 - 90

(即,拍摄将宽视角的大小)。

我会以为使用(角度 - 45)和(角度+ 45),所以你的镜头总是相同的角度宽度和中心在桶。

您还需要增加第二个角落的“半径”。我对+10和-10感到困惑,不太清楚他们会做什么。

也许更好的方法是计算子弹的“中心”,然后从中心画圆圈。我确定有一个函数需要中心和半径。因此,有

radius=10 
centrex= radius * cos (angle * math.pi /180) 
centrey= radius * sin (angle * math. pi/180) 

,然后通过这两个和一个半径,做了一圈

另外一个小东西,我会建议改变路线

if angle == 360: angle = 0 

功能
if angle >= 360: angle = angle-360 

好像角度被初始化为偶数以外的任何东西,或者您改变了角度您可以“错过”360,然后永远不会回绕。