2014-09-25 83 views
0

當玩家射擊Bullet類正在初始化。問題與角度和目標座標

class Bullet(BaseClass): 
    def __init__(self, x, y, tx, ty, angle): 
     ... 
     self.tx, self.ty = tx, ty 
     # Here's the problematic part 
     self.tx += random.uniform(-15, 15) 
     self.ty += random.uniform(-15, 15) 

     self.angle = get_angle(x, y, self.tx, self.ty) 
     ... 
     self.velx, self.vely = get_vel(self.angle, 18) 

def get_angle(x1, y1, x2, y2): 
    rise = y1 - y2 
    run = x1 - x2 
    angle = math.atan2(run, rise) 
    angle = angle/(math.pi/180) 
    return angle 

def get_vel(angle, offset): 
    return (math.sin(angle * (math.pi/180)) * offset, math.cos(angle * (math.pi/180)) * offset) 

xtxyty之間的距離是小angle越來越怪異。 有時子彈甚至走向相反的方向。

我該如何解決這個問題?

+0

通過使用比'random.uniform()'更好的約束。 – 2014-09-25 06:17:30

+0

你說得對,randint會更好。但這並不重要。問題出在數字上。 – ivknv 2014-09-25 06:21:49

+0

它確實很重要。你目前的限制是讓它有這些奇怪的軌跡。 – 2014-09-25 06:23:50

回答

1

您可以根據距離縮放約束,直到達到最大值。目標點遠離射手距離目標是沒有意義的。