我想要做的只是讓球從牆上反彈。除了我希望能夠提高移動速度的事實之外,一切都可以正常工作。從字面上看,速度是多少'x值'被添加(以px爲單位)到球的當前位置。問題是,當我增加var speed
時,球浮出界限,因爲籃板的邊界和當前位置之間的差異來檢查籃板。在javascript中提高球的速度
-------------------------------------- update ------- ----------------------------------
我已經使用了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;
}
另一個問題是,我的代碼的數學是不正確有時,這些我絕對不能找出原因。要測試它,以不同的速度嘗試45度。 問題是:我該如何改進'碰撞檢查'過程,甚至應用其他一些技術來做到這一點? 整個代碼可以在這裏找到: http://jsfiddle.net/au99f/16/