【发布时间】:2017-12-20 00:43:10
【问题描述】:
我从第一个点(玩家位置)发射了一颗子弹,它需要以给定的速度向第二个点(鼠标点击)移动。
现在我拥有所有这些代码。
cx 和 cy 标记玩家或第一点的中心 而 MouseX 和 MouseY 代表鼠标点击的坐标
if MouseX < cx: #determines direction of bullet
direction = 'left'
else:
direction = 'right'
if (cx-MouseX) != 0:
new_slope = (cy - MouseY) / (cx - MouseX)
else:
new_slope = 'undefined' #determines slope and b value to get the equation of the line
#that the bullet travels on
if new_slope != 'undefined':
b_value = ((-1)*(new_slope)*(cx))+(cy)
else:
b_value = None
和
if self.direction == 'right':
if self.slope != 'undefined':
if self.slope > 0 or self.slope < 0 and self.slope != 0:
if self.slope < 1 or self.slope > -1:
float(self.bx)
float(bullet_speed)
self.by = (self.slope*(self.bx+bullet_speed)+self.b_value)
self.bx = ((self.by - self.b_value)/self.slope)
else:
float(self.bx)
float(bullet_speed)
self.bx = (((self.by+bullet_speed) - self.b_value)/self.slope)
self.by = (self.slope*(self.bx)+self.b_value)
else:
self.bx = self.bx + bullet_speed
else:
if self.slope != 'undefined':
if self.slope > 0 or self.slope < 0:
if self.slope < 1 or self.slope > -1:
self.by = (self.slope*(self.bx-bullet_speed)+self.b_value)
self.bx = ((self.by - self.b_value)/self.slope)
elif self.slope == 0:
self.bx -= bullet_speed
else:
self.bx = (((self.by-bullet_speed) - self.b_value)/self.slope)
self.by = (self.slope*(self.bx)+self.b_value)
else:
self.bx = self.bx - bullet_speed
它非常混乱,导致我的子弹在向上或向下射击时会加快速度,而在向左或向右射击时会变慢。
但是,我不知道应该做些什么来更改代码以允许我的子弹以相同的速度行进,而不管射击的角度如何。如果有人擅长数学和 tkinter 等可以提供帮助,将不胜感激。
(附带说明,我所有的对象都是 Tkinter 画布项目,因此它们必须移动整数)
【问题讨论】:
-
这张图片可能对你来说太难了 - Calculate position having angle and speed or distance。如果你有
speed和angle,那么你必须使用sin(),cos()来计算delta_x,delta_y,然后你必须将它添加到当前位置。 -
太在两点之间得到
angle你可能不得不使用 ``math.atan2(dy, dx)` - 它以弧度返回angle但sin()/cos()也需要弧度。 -
哦,好吧,这很有意义。谢谢! @furas
标签: python python-2.7 tkinter vector