2012-10-16 6 views
2

나는이 기사를 발견했다 : 나의 이해를 도운 http://android-developers.blogspot.ca/2010/06/making-sense-of-multitouch.html 그러나 나는 아직도 내가하려고하는 것을하는 방법을 확신하지 못한다.Android에서 멀티 터치 이해?

내 게임에는 가상의 아날로그 스틱과 버튼이 있습니다. 한 번에 2 개의 손가락 만 등록됩니다. 이것이 내가 원하는거야. 하나는 아날로그 스틱 용이고 다른 하나는 버튼 용입니다.

내가 가장 잘 알고있는 것은 아날로그 스틱에 손가락을 대고 손가락으로 움직이고 버튼에 손가락을 대고 버튼을 놓으면 아날로그 스틱이 계속 움직여야한다는 것입니다. 첫 번째 손가락.

반대로 버튼을 먼저 누른 다음 아날로그 스틱을 누르면 아날로그 스틱을 놓으면 버튼이 여전히 아래로 밀려납니다.

안드로이드에서 이러한 방식으로 터치 포인터가 작동합니까, 일단 손가락을 내려 놓으면 다른 손가락이 위 또는 아래에 놓여지면 순서대로 내 첫 손가락을 기억하고 움직이게합니다 위로 이동 이벤트를 이동? 그 손가락이 상승 할 때 이벤트를 이동하고,

void onTouch(int fingerID, int action, int x, int y) 
{ 

} 

내려 놓고 각각의 손가락이 아래로 나타납니다

감사

이상적으로 나는이 같은 기능이 있었으면 좋겠다.

게임은 레이싱 게임이므로 동시에 가스를 조종하고 밀 수 있어야합니다. 이 코드가

:

내 문제는이 identified multi touch pointer in action_move

편집과 유사

private void onTouch(int finger, int action, float x, float y) 
    { 
     if(action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) 
     { 
      createInput(finger, x, y); 
     } 
     else if(action == MotionEvent.ACTION_MOVE) 
     { 
      inputMove(finger, x, y); 
     } 
     else if(action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_POINTER_UP) 
     { 
      destroyInput(finger, x, y); 
     } 
    } 

    public void onTouch(MotionEvent ev) 
    { 
     final int pointerCount = ev.getPointerCount(); 
     for (int p = 0; p < pointerCount; p++) { 
      onTouch(ev.getPointerId(p), ev.getAction(), ev.getX(p), ev.getY(p)); 
     } 
    } 

을하지만 그것은 단지 처음 작동합니다. 그래서 바로 MotionEvent 클래스에 주어진 예에서

+0

내가 틀릴 수도 있습니다. MotionEvents에 가입하면 PointerId가 MotionEvent의 각 포인트에 대해 검색 될 수 있다고 생각합니다. 이 경우 MotionEvent에서 일괄 처리 된 인덱스를 살펴볼 때 어느 인덱스가 적합한 지 결정할 수 있어야합니다. 따라서 각 포인터 이벤트에 대한 동작의 특성이 올바르다면 올바르게 작동해야합니다. –

답변

1

:

public boolean onTouch(MotionEvent ev) { 
    final int pointerCount = ev.getPointerCount(); 
    for (int p = 0; p < pointerCount; p++) { 
     onTouch(ev.getPointerId(p), ev.getAction(), ev.getX(p), ev.getY(p)); 
    } 
    return true; 
} 
+0

제 편집문을 참조하십시오. 작동하지 않습니다. – jmasterx

+0

NVM, 작동 시켰습니다. – jmasterx

0

당신은 핀치 줌에 대한 AChartEngine에서 처리되는 방식을 살펴 수 있습니다. 803 번에서 시작하여 코드 this을 참조하십시오. 처음에는 복잡해 보일 수 있지만 더 많은 사용 사례를 처리하는 데 도움이 될 수 있습니다.