2014-04-12 5 views
1

내가하려는 것은 단순히 공을 벽에서 튀어 나오게 만드는 것입니다. 모든 것이 정상적으로 작동합니다. 운동 속도를 높이고 싶다는 사실을 제외하고는. 말 그대로 속도는 공의 현재 위치에 '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/

답변

3

매우 가깝습니다! 대답은 실제로 귀하의 질문에 암시됩니다. 현재 방향을 변경할시기를 결정하기 위해 경계까지의 거리의 절대 값을 사용 중입니다. 이것은 공이 약 6 픽셀 너비의 방향을 변경할 수있는 "마법 영역"을 정의합니다 (속도가 3 인 경우). 10보다 높은 속도로 속도를 올리면이 마술 영역을 바로 뛰어 넘을 수 있습니다.

이 작업을 수행하는 더 좋은 방법은 다음 점프가 공을 경계 밖으로 완전히 벗어날지를 테스트하는 것입니다. 따라서이 검사는 상수 (3과 같음)를 기반으로하지 않고 볼 자체의 속도에 기반합니다. 또한 볼을 반대 방향으로 얼마나 멀리 움직일 지 결정하기 위해 볼이 얼마나 멀리 벗어 났는지 볼 수 있습니다. 즉, 속도가 10이고 8 단계에서 볼이 오른쪽 가장자리에서 3 픽셀이면 9 단계에서 볼이 오른쪽 가장자리에서 7 픽셀 떨어져 왼쪽으로 이동합니다. 가장자리의 경우를 경계하십시오 (공은 경계선에 정확하게 착륙 할 수 있습니다).