튜토리얼을 읽고 여기에서 multiTouch 및 Stackoverflow와 관련된 모든 질문을 보는 데 수많은 시간을 보냈습니다. 그러나 나는 이것을 올바르게하는 법을 알 수 없습니다. 나는 루프를 사용하여 내 것을 얻는다. pointerId
많은 사람들 이이 일을 보지 못하지만 다소 효과가있는 유일한 방법이다.
화면에 두 개의 조이스틱이 있는데, 하나는 움직이기위한 것이고 다른 하나는 Monster Shooter에서와 같이 스프라이트 회전과 그가 촬영하는 각도를 제어하기위한 것입니다. 둘 다 잘 작동합니다.
내 문제는 내가 임 촬영과 동시에 내 스프라이트를 이동하면 내이다 touchingPoint
나의 운동이 설정되어 touchingPoint
때문에, 내 촬영 x
하고 y
온 더 높다 touchingPoint
(내 촬영 moving-stick
, 화면의 왼쪽에서 shooting-stick
오른쪽) 스프라이트 속도가 빨라져 스프라이트 속도가 원하지 않게 변경됩니다.
이것이 내가 당신의 도움으로 해결 한 방법입니다! 이것은 비슷한 문제가 발생할 수있는 사람을위한 것입니다.
public void update(MotionEvent event) {
if (event == null && lastEvent == null) {
return;
} else if (event == null && lastEvent != null) {
event = lastEvent;
} else {
lastEvent = event;
}
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
int pid = action >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int x = (int) event.getX(pid);
int y = (int) event.getY(pid);
int index = event.getActionIndex();
int id = event.getPointerId(index);
String actionString = null;
switch (actionCode)
{
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
actionString = "DOWN";
try{
if(x > 0 && x < steeringxMesh + (joystick.get_joystickBg().getWidth() * 2)
&& y > yMesh - (joystick.get_joystickBg().getHeight()) && y < panel.getHeight()){
movingPoint.x = x;
movingPoint.y = y;
dragging = true;
draggingId = id;
}
else if(x > shootingxMesh - (joystick.get_joystickBg().getWidth()) && x < panel.getWidth()
&& y > yMesh - (joystick.get_joystickBg().getHeight()) && y < panel.getHeight()){
shootingPoint.x = x;
shootingPoint.y = y;
shooting=true;
shootingId=id;
}
}catch(Exception e){
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
if(id == draggingId)
dragging = false;
if(id == shootingId)
shooting = false;
actionString = "UP";
break;
case MotionEvent.ACTION_MOVE:
for(index=0; index<event.getPointerCount(); index++) {
id=event.getPointerId(index);
int xx = (int) event.getX(index); //pro naming of variable
int yy = (int) event.getY(index);
if(dragging && id == draggingId) {
if(xx > 0 && xx < (steeringxMesh + joystick.get_joystickBg().getWidth() * 2)
&& yy > yMesh - (joystick.get_joystickBg().getHeight()) && yy < panel.getHeight()) {
movingPoint.x = xx;
movingPoint.y = yy;
}
else
dragging = false;
}
if(shooting && id == shootingId){
if(xx > shootingxMesh - (joystick.get_joystickBg().getWidth()) && xx < panel.getWidth()
&& yy > yMesh - (joystick.get_joystickBg().getHeight()) && yy < panel.getHeight()) {
shootingPoint.x = xx;
shootingPoint.y = yy;
}
else
shooting = false;
}
}
actionString = "MOVE";
break;
}
Log.d(TAG, "actionsString: " + actionString + ", pid: " + pid + ", x: " + x + ", y: " + y);
내가 잘못하고있는 것을 절대적으로 잃어 버리지 않으면이 많은 코드를 게시하지 않을 것입니다. 멀티 터칭이 어떻게 작동하는지 잘 이해하지 못합니다.
movingPoint
첫 번째 손가락과 두 번째 손가락 모두 기본적으로 변경됩니다. 나는 그것을 상자에 묶지 만,이 상자 안에 한 손가락을 대고있는 한, 두 번째 손가락이 닿는 위치에 따라 그 값이 바뀝니다. 그것은 올바른 방향으로 움직이고 아무것도 오류를주지 않습니다. 문제는 속도 변화이며 거의 두 개의 터치 포인트를 추가하는 것과 같습니다.