2014-02-13 2 views
2

내 앱에는 표면 뷰에서 움직이는 물체가 있습니다. 가속도계를 통해 주변을 이동할 수 있습니다.가속 오브젝트의 Android 차단 감지

if(x + mx*speed > 0 && x + mx*speed < GameView.WIDTH) { 
     x += mx*speed; 
    } 
if(y+ my*speed > 0 && y+ my*speed < GameView.HEIGHT) { 
     y+=my*speed; 
    } 

X 및 Y는

MX 플레이어는 예를 들어, 가속도계로부터 얻는 값이 플레이어의 좌표 : 여기에서 플레이어 오브젝트의 이동 코드의 왼쪽으로 기울 때, MX는 -2, 더 기울일 때, mx가 -4, -5, -6 등입니다. y 축에 대해 my가 동일합니다.

속도는 내가 원하는 경우 주위를 수정하고 재생할 수있는 변수입니다. 빠른 움직임.

볼 수 있듯이 플레이어가 볼 안쪽에있을 때만 움직일 수 있도록 제한하려고했습니다.

내 문제는 다음과 같습니다. 기기를 집중적으로 오른쪽으로 기울이면 mx가 6. 속도가 5로 설정됩니다. 즉, 플레이어의 위치 + 6 * 5가 게임보기보다 크면 더 이상 움직이지 마라. 그러나 플레이어가보기의 오른쪽 앞에서 픽셀을 멈추게합니다. 오른쪽으로 가볍게 기울이면 개체가보기의 경계에서 완전히 멈 춥니 다.

이제 어떻게 변경해야합니까? 코드를 사용하여 화면 경계에서 완벽하게 움직임을 멈추게하는 객체를 얻을 수 있습니까? 원 및 아래쪽 테두리 사이의 일부 픽셀이 있기 때문에 당신이 원이 바닥에 확실히 중지되지 볼 수 있습니다이 그림에

Image with intensively use of accelerometer

. 낮은 MX 또는 내와 의미,

bottom of the screen

그러나 천천히 이동할 때 지금, 난 단지 화면 테두리에 도달 할 수 있습니다 : 약간 뒤로 가속도계에 갈 때, 원은 화면 하단에 자신을 정렬 .

스크린 샷을 보면 mY 값을 볼 수 있습니다. 첫 번째 그림에서 my = ca. 8 및 두 번째 ca. 6.

아이디어가 있으십니까? 사전

+0

스크린 샷 또는 두 개의 같은 경계에 값을 캡. – Kerry

+0

두 장의 스크린 샷이 추가되었습니다. – user2410644

+0

충돌 감지에 대해 잠들지 말고 Android 브레이크 아웃 (https://code.google.com/p/android-breakout/)에서 확인할 수 있습니다. 특히 GameState.java에서'findFirstCollision()'의 맨 위에있는 주석을 주목하십시오 - 게임은 볼을 조금씩 앞으로 나아가며 각 단계에서 확인합니다. 당신은 이것을 필요로하지 않습니다 - 당신은 걱정할 4 개의 벽만 있습니다. 따라서 대수가 답을 제공 할 것입니다 - 그러나 당신이 더 많은 물체를 추가한다면 당신은 비슷한 것을 필요로 할 것입니다. (충돌이 중심보다 오브젝트의 가장자리에서 발생하면 더 복잡해집니다.) – fadden

답변

2

시도에서

감사 대신 질문을 명확히 도움이 될 수 있도록

x = Math.max(Math.min(x + mx*speed, GameView.WIDTH), 0.0f)); 
y = Math.max(Math.min(y + my*speed, GameView.HEIGHT, 0.0f)); 
+0

감사합니다! 편집 : 잘됩니다! 하지만 안타깝게도 화면의 오른쪽과 아래에서만 작동합니다 ...이 두면을 구현하는 방법에 대한 제안이 있습니까? – user2410644

+0

. 이것을 처리해야하는 코드를 추가했습니다. 그래도 조금 해키. 이 시점에서'cap' 또는 그와 비슷한 메소드를 만들 수 있습니다. – vidstige

+0

매력처럼 작동합니다! 고맙습니다! (완전히 Math.min 또는 Math.max에 대해 생각하지 않았습니다.) – user2410644