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

터치 이벤트가 무조건 두번 실행이 됩니다.

0 추천

퍼즐 게임을 하나 만들고 있습니다..

터치 이벤트시 지정한 메소드가 무조건 두번 실행이 됩니다..ㅠㅠ

도저히 원인을 알 수 없어 도움을 청해봅니다..

-----> 터치 이벤트 부분

case MotionEvent.ACTION_UP:
   touchItem(x, y);

-----> 터치시 실행되는 메소드

public void touchItem(int x, int y) {
  if (item.get("uncle").isSelected(x, y)) {
   stage.useItemUncle();
   
  } else if (item.get("mother").isSelected(x, y)) {
   stage.useItemMother();
 
  } else if (item.get("father").isSelected(x, y)) {
   stage.useItemFather();
  }
 }
 
---> stage class에서 실행되는 메소드
 
public void useItemMother() {
  isItemDestroy = true;
  int blockNum = selectBlock.getBlockNum();
  destroyBlocks = getTargetBlock(blockNum);
  destroyBlocks.add(selectBlock);
  destroyBlocks();
 }
 
이런 식인데..
핵심 소스만 올려봅니다.
저게 다인데.. 왜 무조건 두번 실행이 될까요..
 
 
 
터치이벤트 전체소스입니다.
=============================
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  int x = (int) (event.getX() * Screen.getTouchScaleX());
  int y = (int) (event.getY() * Screen.getTouchScaleY());
 
  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   startX = x;
   startY = y;
 
  case MotionEvent.ACTION_UP:
   endX = x;
   endY = y;
 
   if (gameState == GAME_STATE_PLAYING) {
    controlBlocks();
 
   } else if (gameState == GAME_STATE_FAIL) {
    handler.sendMessage(Message.obtain(handler, GAME_STATE_FAIL));
    touchMissionFail(x, y);
 
   } else if (gameState == GAME_STATE_SUCCESS) {
    handler.sendMessage(Message.obtain(handler, GAME_STATE_SUCCESS));
    touchMissionSuccess(x, y);
 
   } else if (gameState == GAME_STATE_CLOSE) {
    handler.sendMessage(Message.obtain(handler, GAME_STATE_CLOSE));
    touchPlayExit(x, y);
   }
   
   touchItem(x, y);
   }
  return true; 
 }

 

익명사용자 님이 2014년 12월 18일 질문
2014년 12월 18일 수정
터치이벤트 부분 전체소스 올려줘 보세요
case 끝나는 부분에 break가 없어서 생기는 문제인것 같습니다. 한번 break 걸어보세요. 그리고 잘대면 댓글점...

3개의 답변

0 추천
소스코드만 봐서는 문제 없이 보이네요.
heylee 님이 2014년 12월 18일 답변
0 추천
break; 가 안보이는데 그건 상관 없을까요
ㅇㅇ 님이 2014년 12월 22일 답변
0 추천

 case MotionEvent.ACTION_DOWN:
   startX = x;
   startY = y;

요기에 break;
  case MotionEvent.ACTION_UP:
   endX = x;
   endY = y;
 
   if (gameState == GAME_STATE_PLAYING) {
    controlBlocks();
 
break; 가 없으니 ACTION_DOWN 일때 ACTION_UP 도 같이 먹지요..
ACTION_UP일때에는 ACTION_UP만 먹겠지요?
nicehee (73,100 포인트) 님이 2014년 12월 22일 답변
...