【问题标题】:Firing a shot from a character in the direction of mouse click从角色向鼠标点击方向射击
【发布时间】:2014-05-11 13:04:50
【问题描述】:

首先我想说我在 AS3 方面不是很好,我完全是自学成才,所以我确信有很多事情我做的很糟糕,效率低下或完全错误,我如果有什么我可以改进的,对这些方面的任何 cmet 感到高兴。

所以我正在尝试添加功能,让玩家能够点击我的游戏的一部分,并且一个“钩子”将从鼠标点击的方向从角色发射一定长度。最后将是该钩子和平台之间的碰撞检测。

但是我遇到的问题是我不知道如何运行代码来定位需要发射钩子的角度,我知道这是一定数量的数学和任何可以提供的帮助会有所帮助(即使你不能为我解决问题)

到目前为止,我已经能够找到我的英雄的 x 和 y 位置以及鼠标单击的位置,此代码如下所示:

 public function Hookshot (event:MouseEvent):void {

    PlatformInstance[i] =new Platform();
        var _point:Point = localToGlobal (new Point(mouseX,mouseY));
         var heroX:int = Smallclock_hero.x;
         var heroY:int = Smallclock_hero.y;
         trace (heroX)
        trace (heroY)
         trace(_point.x)
        trace(_point.y)
    }

我还不确定是否有任何其他相关代码,因为我无法弄清楚如何进行这种数学运算。

如果您需要任何其他代码或有任何问题,请随时提出并提前致谢!

【问题讨论】:

  • 基本三角函数会有所帮助。您可以在两点之间绘制的三角形是直角三角形。这意味着a squared + b squared = c squared 这意味着您可以找到相当容易拍摄的角度。希望对您有所帮助。 google.com.au/…

标签: actionscript-3 math game-physics


【解决方案1】:

Math.atan2(y, x) 会将 x 和 y 值转换为角度:

var mousePos:Point = localToGlobal(new Point(mouseX,mouseY));
var heroPos:Point = localToGlobal(new Point(Smallclock_hero.x, Smallclock_hero.y));

var dx:Number = mousePos.x - heroPos.x;
var dy:Number = mousePos.y - heroPos.y;
var radians:Number = Math.atan2(dy, dx);

// Convert the radians value to degrees
var angleInDegrees:Number = radians * 180/Math.PI;

trace(angleInDegrees);

Math.atan2() 文档: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Math.html#atan2()

【讨论】:

  • 非常感谢!这似乎完美无缺!只是一个简单的问题,Math.atan2 和 Math.atan 有什么区别??
  • 作为 Digital Utopia 的示例,使用 Math.atan() 您只需提供一个参数:y/x。两个函数给出相同的结果。
【解决方案2】:

您的问题与 AS3 无关,因为它是简单的代数。

如果你有角色的 x,y 和目标的 x,y,那么你只需要做直线方程就可以得到角度。

atan((Y2-Y1)/(X2-X1))

这应该给你弧度,然后简单地将它乘以 (180/pi) 得到度数

【讨论】:

  • 我知道这听起来非常愚蠢,但有没有办法给他们举个例子?发现自己越来越困惑。
  • 假设您的角色在 x=5,y=10,而您的目标在 x=9,y=20。因此,您首先减去两个 (y) 20-10=10 (x) 9-5 = 4 然后将 y 除以 x:10/4 = 2.5 然后取其中的 atan(2.5),即 1.19028995,这就是以弧度为单位,因此您想将其转换为角度的度数。要做到这一点,你将它乘以 180/pi,得到的结果是 68.19 度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
相关资源
最近更新 更多