2014-01-08 3 views
0

나는 한 블록에서 다음 블록으로 손가락을 드래그하는 게임을 만들고있다.안드로이드가 터치 좌표를 포함한다면 안드로이드는 이상한 결과를주는 배열에 더하기

내가해야 할 일 : 그들이 블록 위로 마우스를 가져 가면 해당 블록 번호가 배열에 추가되어 어떤 순서로 블록을 터치했는지 알 수 있습니다. 클릭하지 않고 블록에서 블록으로 드래그해야합니다 일종의 안드로이드 lockscreen 애플 리케이션).

좌표와 치수를 사용하여 각 블록에 직사각형을 작성한 다음 사용자의 터치가 해당 직사각형 내에 있으면 해당 블록 번호를 배열에 추가합니다.

작동하는 것처럼 보이지만 버튼 1, 2 및 3에서만 작동합니다 (1, 2 및 3 만 어레이에 추가됩니다). 그러나 log 터치가 logcat 및 버튼 크기/그 물건을 집어 들고 왜 정보를 가지고 있지 않은지 모르겠다.

@Override 
public boolean onTouch(View arg0, MotionEvent arg1) { 
    // TODO Auto-generated method stub 
    try { 
     Thread.sleep(50); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    x = (int) arg1.getX(); 
    y = (int) arg1.getY(); 

    if(b1R.contains(x,y)){ 
     arr.add("1"); 
    } else if(b2R.contains(x,y)){ 
     arr.add("2"); 
    } else if(b3R.contains(x,y)){ 
     arr.add("3"); 
    } else if(b4R.contains(x,y)){ 
     arr.add("4"); 
    } else if(b5R.contains(x,y)){ 
     arr.add("5"); 
    } else if(b6R.contains(x,y)){ 
     arr.add("6"); 
    } else if(b7R.contains(x,y)){ 
     arr.add("7"); 
    } else if(b8R.contains(x,y)){ 
     arr.add("8"); 
    } else if(b9R.contains(x,y)){ 
     arr.add("9"); 
    } 

    if(arr.toString() != null){ 
     Log.d("log", arr.toString()); 
     Log.d("x", ""+x); 
     Log.d("y", ""+y); 
    } 
    return false; 
} 

@Override 
public void onWindowFocusChanged (boolean hasFocus){ 
    super.onWindowFocusChanged(hasFocus); 
    if(hasFocus){ 
     b1R = new Rect(b1.getLeft(), b1.getTop(), b1.getRight(), b1.getBottom()); 
     b2R = new Rect(b2.getLeft(), b2.getTop(), b2.getRight(), b2.getBottom()); 
     b3R = new Rect(b3.getLeft(), b3.getTop(), b3.getRight(), b3.getBottom()); 
     b4R = new Rect(b4.getLeft(), b4.getTop(), b4.getRight(), b4.getBottom()); 
     b5R = new Rect(b5.getLeft(), b5.getTop(), b5.getRight(), b5.getBottom()); 
     b6R = new Rect(b6.getLeft(), b6.getTop(), b6.getRight(), b6.getBottom()); 
     b7R = new Rect(b7.getLeft(), b7.getTop(), b7.getRight(), b7.getBottom()); 
     b8R = new Rect(b8.getLeft(), b8.getTop(), b8.getRight(), b8.getBottom()); 
     b9R = new Rect(b9.getLeft(), b9.getTop(), b9.getRight(), b9.getBottom()); 
    } 
} 

이이 logcat에 무엇을 인쇄되고있다 :

[1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,3,3,3] 

및 다른 버튼 여기

코드인가?

도와주세요! 사전에

감사합니다!

답변

1

B1r이란 무엇입니까? 새로운 위치 집합을 고려하여 어느 시점에 이것을 업데이트해야합니까? Else If 문을 사용하고 있습니다. 즉, 길이가

if(b1R.contains(x,y)){ 

으로 평가되는 경우 다른 모든 검사는 실행되지 않습니다.

b1r의 경계가 전체 화면 또는 다른 잘못된 항목 (또는 "올바른"값이지만 손상된 값)으로 설정되지 않았는지 확인합니다.

더 많은 코드가 없으면 실제로 디버깅하기가 어렵습니다.

+0

나는 'else's'를 꺼내서 작동했습니다! 감사! – VaMoose

관련 문제