我需要这个功能才能继续使用我的简单滚动射击游戏。
Public Function GetDirection(origin As Point, target As Point) As Single
'do some trigonometry here
Return Direction
End Function
通常我会插入以下参数:GetDirection(player_point, MousePosition)
在这种情况下使用它们:
Dim direction As Single = GetDirection(player_point, MousePosition)
Dim blt_increment_x As Single = Math.Sin(direction)
Dim blt_increment_y As Single = Math.Cos(direction)
现在这些变量可用于移动我的子弹实体:
blt_point.X += blt_increment_x
blt_point.Y += blt_increment_y
我需要的只是这个GetDirection()
函数的代码。目前我不知道从哪里开始,我将其设置为不断返回0.我正在使用VB.NET。谢谢! :)
答案 0 :(得分:2)
您应该使用Math.Atan2方法。我不是VB开发人员,但我认为您可以将以下伪代码转换为VB:
direction = Math.Atan2(target.Y - origin.Y, target.X - origin.X)
但是查看您的代码并注意到您将在下一行中使用Math.Sin
和Math.Cos
,整个想法毫无意义。移动方向由X和Y坐标的差异指定。如果你想拥有一个constand速度,你的代码可能是这样的
dX = target.X - origin.X
dY = target.Y - origin.Y
len = Math.Sqrt(dX*dX + dY*dY)
blt_increment_x = Speed * dX / len
blt_increment_y = Speed * dY / len