如何确定动画精灵到达某个点的时间?

时间:2012-06-29 21:33:03

标签: javascript algorithm function math

我在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次,并且它是浮动添加!谢谢!

3 个答案:

答案 0 :(得分:0)

通常(我过去开发了一些游戏,没有什么特别的btw)我曾经把我的精灵看成是矩形,然后我用一个非常简单的公式检查两个精灵的重叠(看起来在this very good explanation)。

我们假设您必须检查点和矩形之间的碰撞。您可以应用相同的公式(简化)来检查点是否位于矩形区域之间。在这种情况下,read here

答案 1 :(得分:0)

解决方案:

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

function getSign(val) { ... }

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

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,您就知道自己处于或超过了目标点。

答案 2 :(得分:0)

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

PRINT PEEK(53279)

: - )