마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

충돌처리에 관한 질문입니다.

0 추천
물방울 터뜨리기 게임을 개발중입니다.

떨어지는 물방울을 화면터치를 이용하여 터뜨려야하고

못터뜨리면 바닥의 수면이 차올라 끝이 나는 게임입니다.

 

여기서 수면과 물방울이 닿았을때 충돌처리는 어떻게 접근해야하는지 질문합니다.

답변부탁드립니다.ㅠㅠ
에이스클럽 (120 포인트) 님이 2013년 5월 19일 질문

1개의 답변

+1 추천

수면<파동을 무시할수준  , 화면을 꽉채우는 수평선이라고 가정 하였을때>

수면이 가지는 화면상의 높이값 y 가 100 이라고 합시다.

물방울 <완벽한 원형이라고 가정하였을때>

물방울의 중점 x좌표, y좌표, 물방울의 반지름 radius가 존재합니다.

이때

if( 물방울.y + 물방울.radius >= 수면.y ){

/* 안드로이드 화면상 view의 원점은 좌측 상단이므로

중점에 반지름을 "+" 하여 수면과의 높이를 비교합니다.

물방울의 중점 y에 반지름 raius를 더한다는것은 물방울의 가장 아랫쪽 y값을 의미합니다.

그렇게 계산한 y값이 수면.y와 같거나 넘었을때<뷰기준으로 물방울이 수면을 넘어있거나 접함>  

원과 선이 접했음을 의미하므로 충돌했다고 볼 수 있습니다.  

화면상 수면의 폭<width>이 전체가아닌 일정부분에 속하거나 

물방울.x가 수면의 폭을 벗어날 경우의 수가 존재한다면 , 

수면.leftX  수면.rightX 두점과 물방울.x를 비교하여 처리해야합니다.

뷰의 전체폭이 수면폭과 같고 물방울의 x값이 뷰의 폭을 벗어나지 않는다면

x값은 비교하실 필요 없습니다.*/


         // 충돌 O

}

else{


        //  충돌 X

}

이건 사실상 선과 원의 충돌입니다.

수면의 높이에 큰 파도같은 변형변수들이 크게 존재하고 물방울 역시 원형과 거리가 먼 경우

(세밀한 충돌처리를 요구하는경우) 에는 윗방식은 비추천입니다!

ddieoxin (1,550 포인트) 님이 2013년 5월 20일 답변
ddieoxin님이 2013년 5월 20일 수정
...