처음에는 그곳에 관한 게시물이 두 개 이상 있지만 버그/실수를 수정하는 데 도움이되지 않았습니다. 미안하다. 재 게시와 너희들이이 버그를 없애기를 바란다면.pointerIndex 범위를 벗어난 멀티 터치
11-28 17:36:36.110: W/dalvikvm(8380): threadid=1: thread exiting with uncaught exception (group=0x40a331f8)
11-28 17:36:36.110: E/AndroidRuntime(8380): FATAL EXCEPTION: main
11-28 17:36:36.110: E/AndroidRuntime(8380): java.lang.IllegalArgumentException: pointerIndex out of range
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.MotionEvent.getX(MotionEvent.java:1974)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.TouchEventControler.processJoyPadTouchRelease(TouchEventControler.java:194)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.TouchEventControler.processRelease(TouchEventControler.java:237)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.TouchEventControler.processTouchEvent(TouchEventControler.java:88)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.main.GameField.onTouchEvent(GameField.java:142)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.View.dispatchTouchEvent(View.java:5546)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1726)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1938)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1375)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.app.Activity.dispatchTouchEvent(Activity.java:2364)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1886)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.View.dispatchPointerEvent(View.java:5726)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2890)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2466)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:845)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2475)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.os.Handler.dispatchMessage(Handler.java:99)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.os.Looper.loop(Looper.java:137)
11-28 17:36:36.110: E/AndroidRuntime(8380): at android.app.ActivityThread.main(ActivityThread.java:4424)
11-28 17:36:36.110: E/AndroidRuntime(8380): at java.lang.reflect.Method.invokeNative(Native Method)
11-28 17:36:36.110: E/AndroidRuntime(8380): at java.lang.reflect.Method.invoke(Method.java:511)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-28 17:36:36.110: E/AndroidRuntime(8380): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-28 17:36:36.110: E/AndroidRuntime(8380): at dalvik.system.NativeStart.main(Native Method)
나는 이런 식으로 그들을 처리 할 그리고 난 그것이 때때로 그 오류로 충돌을 해달라고하면 내가 원하는처럼 실행되는 행복 : 그 스위치에 호출 methodes에서
public void processTouchEvent(MotionEvent event) {
// create an action
int action = (event.getActionMasked() & MotionEvent.ACTION_MASK);
// getting pointerindex
int pointerIndex = ((event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT);
// getting pointer id
//catch invalide
if(pointerIndex == MotionEvent.INVALID_POINTER_ID){
return;
}
int pointerId = event.findPointerIndex(pointerIndex);
// switch case for the action
switch (action) {
case MotionEvent.ACTION_DOWN: // if action down
processHitButtonTouch(event, pointerId);
processJoyPadTouch(event, pointerId);
break;
case MotionEvent.ACTION_POINTER_DOWN: // if pointer down (second
// finger/third)
processHitButtonTouch(event, pointerId);
processJoyPadTouch(event, pointerId);
break;
case MotionEvent.ACTION_UP: // if action up
processRelease(event, pointerId);
case MotionEvent.ACTION_POINTER_UP: // if action up second/third finger
processRelease(event, pointerId);
default:
break;
}
}
을 나는 단지 접촉의 위치를 얻고 그들을 취급하십시오. 난 그냥 getX (pointerIndex) 잡을 수 try 및 해당 오류가 반환하십시오. 그러나 거기에 더 좋은 방법이 있습니까?!
내가 이미 가지고있는 모든 도움을 주셔서 감사합니다.
public void processJoyPadTouchRelease(MotionEvent event, int pointerId) {
int touchPosX = (int) event.getX(pointerId);
int touchPosY = (int) event.getY(pointerId);
if ((//dont freak out here! it's just looking for if the
//touch was inside the Joypad! Nothing more!!
//it's in breckets!
touchPosX > 2 * Config.BLOCKSIZE
&& touchPosX < 4 * Config.BLOCKSIZE
&& touchPosY > 3 * Config.BLOCKSIZE
&& touchPosY < 5 * Config.BLOCKSIZE
// touch up event handled
|| 2 * Config.BLOCKSIZE < touchPosX
&& touchPosX < (Config.BLOCKSIZE * 4)
&& touchPosY > (7 * Config.BLOCKSIZE)
&& touchPosY < (9 * Config.BLOCKSIZE)
// touch down handled
|| (touchPosX < 2 * Config.BLOCKSIZE
&& touchPosY > (5 * Config.BLOCKSIZE)
&& touchPosY < (7 * Config.BLOCKSIZE))
// touch left handled
|| (4 * Config.BLOCKSIZE < touchPosX
&& touchPosX < (Config.BLOCKSIZE * 6)
&& touchPosY > (5 * Config.BLOCKSIZE)
&& touchPosY < 7 * Config.BLOCKSIZE))
//touch right handled
//and the char isnt idle (so it's moving)
&& charac.getStatus() != Status.IDLE)
//THAN do =>>
{
charac.setStatus(Status.IDLE);
joyPad.status = Status.IDLE;
}
}
오류를 던지고있는 크기의 크기()와 비교하고 크기가 너무 크지 않은지 확인하십시오. – codeMagic