在javascript中提高球的速度

在javascript中提高球的速度,javascript,jquery,animation,motion,Javascript,Jquery,Animation,Motion,我想做的只是让球从墙上反弹。一切正常,除了我想提高运动速度。从字面上说,速度就是球的当前位置加上多少“x值”(以px为单位)。问题是,当我增加var速度时,球会浮出边界,因为反弹是通过边界和球的当前位置之间的差值来检查的 --------------------------------------更新----------------------------------------- 我使用了Mekka建议的技术,但仍然做了一些错误的事情。球不再浮在外面,但有些东西“把它推出”边界几个像素/“不让

我想做的只是让球从墙上反弹。一切正常,除了我想提高运动速度。从字面上说,速度就是球的当前位置加上多少“x值”(以px为单位)。问题是,当我增加
var速度
时,球会浮出边界,因为反弹是通过边界和球的当前位置之间的差值来检查的

--------------------------------------更新-----------------------------------------

我使用了Mekka建议的技术,但仍然做了一些错误的事情。球不再浮在外面,但有些东西“把它推出”边界几个像素/“不让球再浮几个像素以到达边界”

我的新代码如下所示:

 // the bounds-describing object
var border={ 
    X:[8,302], // left and right borders in px 
    Y:[8,302], // top and bottom borders in px         
    indX:1, //border index for array Х 
    indY:0, //border index for array Y
    changeInd:function(n){return this[n] = +!this[n]; } // function to change the index
};


   if($("#ball").position().left + speed > border.X[1] || $("#ball").position().left + speed < border.X[0]){

                var distX = "+=" + (border.X[border.indX] - $("#ball").position().left);
                var distY = "-=" + ((border.X[border.indX] - $("#ball").position().left) * k);   

                $("#ball").css("left", distX);
                $("#ball").css("top", distY);

                border.changeInd("indX");
                speed = -speed;                    
   }

   if($("#ball").position().top + k > border.Y[1] || $("#ball").position().top + k < border.Y[0]){

                var distX = "+=" + ((border.Y[border.indY] - $("#ball").position().top) / k);
                var distY = "+=" + (border.Y[border.indY] - $("#ball").position().top);   

                $("#ball").css("left", distX);
                $("#ball").css("top", distY);

                border.changeInd("indY");

                k = -k;

    }
//描述对象的边界
var border={
X:[8302],//px中的左右边框
Y:[8302],//px中的顶部和底部边框
indX:1,//数组的边框索引
indY:0,//数组Y的边框索引
changeInd:function(n){返回此[n]=+!此[n];}//函数以更改索引
};
如果($(“#球”).position().left+speed>border.X[1]|$(“#球”).position().left+speedborder.Y[1]|$(“#球”).position().top+k
另一个问题是,我的代码的数学有时是不正确的,原因我完全无法理解。要测试它,请以不同的速度尝试45度。 问题是:我如何改进“碰撞检查”过程,甚至应用其他技术来实现这一点? 整个代码可在此处找到:

你很接近!你的问题实际上暗示了答案。您当前正在使用到边界距离的绝对值来确定何时更改方向。这定义了一个“魔术区”,球可以改变方向,大约6像素宽(假设你的速度为3)。当你把速度提高到更高的时候(比如10),你就可以跳过这个魔法区域

一个更好的方法是测试下一次跳跃是否会将球完全放在界外。所以这个检查不是基于一个常数(比如3),而是基于球本身的速度。您还可以查看球的越界距离,以确定球向相反方向移动的距离。换句话说,如果你的速度是10,在第8步,球距右边缘3像素,那么在第9步,球距右边缘7像素,向左移动。小心边缘情况(球可能准确落在边界上)