내가하려는 것은 단순히 공을 벽에서 튀어 나오게 만드는 것입니다. 모든 것이 정상적으로 작동합니다. 운동 속도를 높이고 싶다는 사실을 제외하고는. 말 그대로 속도는 공의 현재 위치에 'x 값'이 얼마나 추가되는지 (px로 측정)입니다. 문제는 내가 var speed
을 올리면 볼이 바운드와 현재 위치 사이의 차이로 리바운드가 확인되기 때문에 바운드에서 벗어난 상태입니다.자바 스크립트에서 공의 속도 높이기
-------------------------------------- 업데이트 ------- ----------------------------------
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/