0

我有一个 Javascript 中的 2D 动画,我需要一个精灵以设定的速度和方向从一个点 (x1, y1) 移动到另一个点 (x2, y2)。例如,

function update(speedX, speedY){
    x1 += speedX;
    y1 += speedY;
    if("(x1, y1) reach (x2, y2)"){
        // do other stuff
    }
}

在大多数情况下,speedX 和 speedY 不相等,它们也不会均匀地影响每个轴所需的行进距离。我使用切线函数计算 speedX 和 speedY 值,以计算给定速度和角度的必要速度。

我的问题是,有没有一种算法可以做到这一点?我更喜欢高效的东西,因为这必须每秒完成 30 次,而且它是浮点加法!谢谢!

4

3 回答 3

0

通常(我过去开发过一些游戏,没什么特别的顺便说一句)我曾经将我的精灵视为矩形,然后我使用一个非常简单的公式检查两个精灵的重叠(看看这个非常好的解释)。

假设您必须检查 point 和 rectangle 之间的碰撞。您可以应用相同的简化公式来检查该点是否位于矩形区域之间。在这种情况下,请阅读此处

于 2012-06-29T21:46:38.050 回答
0

解决方案:

好的,通过一些工作我想通了。首先,我定义了一个函数

function getSign(val) { ... }

根据传入的数字分别是负数、0 还是正数,它只返回 -1、0 或 1。然后,我在开始时做了以下事情(在任何更新发生之前):

var xSign = getSign(x1-x2);
var ySign = getSign(y1-y2);

最后,要检查该点当前是否位于或刚刚超过目标 (x2, y2),只需检查以下代码:

function update(speedX, speedY){
    x1 += speedX;
    x2 += speedY;
    var curXsign = getSign(x1-x2);
    var curYsign = getSign(y1-y2);
    if( curXsign != xSign || curYsign != ySign ||
        (curXsign == 0 && curYsign == 0)){
            // do other stuff
    }
}

基本上,如果 X 或 Y 之间的相对矢量距离的任何一个符号改变了符号,这意味着该轴经过了该点。如果 curXsign 和 curYsign 都为 0,这意味着它就在目标点上。这三种情况中的任何一种都意味着您正在或刚刚超过目标点。测试和工作。

另一种可能的解决方案是测试起点和当前位置之间的距离(curDist),并将其与起点和目标点之间的距离(dist)进行比较。一旦 curDist >= dist,你就知道你已经到达或超过了目标点。

于 2012-06-30T17:28:41.397 回答
0

它位于 VIC-II 的 $1F 端口中:

PRINT PEEK(53279)

:-)

于 2013-12-04T21:01:27.870 回答