【问题标题】:Calculate speed from velocity vector using box2d GetLinearVelocity();使用 box2d GetLinearVelocity() 从速度矢量计算速度;
【发布时间】:2014-10-15 20:04:14
【问题描述】:

我需要在游戏中找出物体的速度。该游戏是用 jquery 和 jquery.box2d 用 HTML5 制作的。 为此,我可以使用以下方法:

 GetLinearVelocity().x;
 GetLinearVelocity().y;

然后我试图从这段代码中计算速度,但是当我 console.log 时得到一些没有意义的值。这是我的代码:

 var heroVelX = game.currentHero.GetLinearVelocity().x;
 var heroVelY = game.currentHero.GetLinearVelocity().y;

 var speed = Math.sqrt(heroVelX^2 + heroVelY^2);
 console.log(speed);

console.log 中的一些值是数字,但大多数是 NaN(非数字),这让我感到困惑?有人可以帮我解决这个问题吗?

我想要实现的目标是查看(对象.currenHero)的速度何时下降到某个值以下,这样我就可以在游戏中执行一个新状态。

【问题讨论】:

    标签: javascript jquery html box2dweb velocity.js


    【解决方案1】:

    您的问题是您使用了错误的运算符 (Bitwise XOR) 进行平方 - see here

    你需要做的是:

    var speed = Math.sqrt(Math.pow(heroVelX, 2) + Math.pow(heroVelY, 2));
    

    【讨论】:

    • 正确答案,但在这种情况下,Math.pow(foo, 2) 与仅写 foo * foo 相比过于矫枉过正。
    • @Alnitak 无论你的风格是什么,这是 JS 中最直接的方式。
    • 我明白你的观点,foo * foo 更简单,只是想获得一个正值。
    • @ydaniv 不,最直接的方法就是var speed = Math.sqrt(heroVelX * heroVelX + heroVelY * heroVelY)
    【解决方案2】:

    平方根函数应该返回 NaN 的唯一时间是平方根值为负数时。测试这是否是问题的一种方法是在对它们进行平方根之前尝试对不同代码行中的值进行平方。

    heroVelX = (heroVelX) * (heroVelX)
    

    另一种可能对问题有所启发的方法是添加日志语句,打印出速度值和平方根之前的速度平方。

    【讨论】:

    • 如果我在执行 Math.sqrt 之前记录输入,我会得到负值。 jqeury 有办法将 tve 值仅转换为正数吗?
    • 取绝对值会返回等量级的正数。所以 Math.abs(-10) = 10
    • 谢谢乔治。我会试试的。
    • -1 错过了 ^ 运算符的明显滥用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多