【问题标题】:VB.NET Get direction from one point to anotherVB.NET 获取从一个点到另一个点的方向
【发布时间】:2017-04-02 02:03:48
【问题描述】:

我需要此功能才能继续使用我的简单滚动射击游戏。

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。谢谢! :)

对于那些想知道的人,这是我的游戏截图,让人想起 diep.io :)

【问题讨论】:

  • 你是说你要计算一个角度吗?如果是这样,那么它只是带有一点代数的毕达哥拉斯。这是你在小学数学课上学到的东西。我建议你努力工作,如果不起作用,然后发布你所做的事情。

标签: vb.net math gdi+ trigonometry


【解决方案1】:

您应该使用Math.Atan2 方法。我不是 VB 开发人员,但我认为您可以将以下伪代码转换为 VB:

direction = Math.Atan2(target.Y - origin.Y, target.X - origin.X)

但是查看您的代码并注意到您将在下一行使用Math.SinMath.Cos,整个想法毫无意义。移动方向由 X 和 Y 坐标的差异指定。如果你想有一个恒定的速度,你的代码可能是这样的

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多