안드로이드 개발 질문/답변
(글 수 40,700)
게임을 만들고 있는데, 플레이어 캐릭터 이동에 관한 문제입니다.
public boolean onTouchEvent(MotionEvent evnet){
int _x = 0;
int _y = 0;
while(캐릭터가 지정한 위치에 다 닿지 않았다면){
_x = (int) event.getX();
_y = (int) event.getY();
player.x++;
player.y++;
}
}
대략 이런식으로 코딩을 했는데요..
문제는 제가 300,300에 터치를 하고, 곧바로 마음이 바뀌어
10, 600을 터치를 하면, 바로 캐릭터가 이동하는 위치에서 10, 600으로 가야하는데
300,300을 들렀다가 10, 600으로 갑니다 ㅠㅠ
아무래도 while문 안에서 event.getX()해줘봤자 이미 첫번째 이벤트의 X값을 얻기 때문에
안바뀌는거 같은데요 ㅠㅠㅠ도중에 IF문으로 다른 터치입력이 오면..뭐 이런
걸 걸고 싶습니다 ㅠㅠㅠㅠ 다른 터치입력 받을 순 없을까요ㅠㅠ?
흰트라도 주신다면 감사하겠습니다ㅠㅠㅠ!
onTouchEvent 자체를 원자단위 메소드(쪼갤 수 없는) 라고 생각하셔야 해요
UI Event가 1회 dispatch 되어 실행되는 거니깐요
300.300 터치 시 해당 이벤트가 UIThread queue에 들어가서 실행 루틴을 타는 도중에
10, 600 터치 하니 또 이벤트가 만들어서 UIThread queue에 들어간거구
첫 번재 이벤트에 대한 처리가 끝나고 두번째 이벤트를 처리하니 위 증상이 생기는거죠
특정 이벤트에 대한 처리 시간이 순간이라고 할 수 없다면 해당 처리는 스레드로 빼고 처리해야합니다.
제생각엔...사용자에 의해 선택 되는 지점으로 캐릭터를 이동 시키는 루틴을 무한루프로 돌아야 할것 같네요
중간에 이동하다가 입력시 바로 취소되고 최신 지점으로 다시 이동 되어야 할터이니
플래그도 잘 써야 할거구요 ㅎ