我花了无数小时来阅读教程,并从这里和Stackoverflow上查看与multiTouch相关的每个问题。但是我只是不知道如何正确地做到这一点。我使用循环来获取我的代码pointerId
,我看不到有很多人这样做,但这是我设法使其有所工作的唯一方法。
我的屏幕上有两个操纵杆,一个用于移动,另一个用于控制我的精灵旋转和他拍摄的角度,就像在Monster Shooter中一样。这些都很好。
我的问题是,当我在与Im拍摄同时移动我的精灵时,我touchingPoint
的动作设置为touchingPoint
我拍摄的,因为x
and 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);
如果我绝对不做错事情,就不会发布这么多代码。我根本无法完全了解multiTouching的工作原理。
movingPoint
我的第一根和第二根手指基本上都在变化。我将其绑定到一个框,但是只要我在该框中握住一根手指,它就会根据我的第二根手指触摸的位置来更改其值。它朝着正确的方向移动,没有任何错误,问题在于速度变化,几乎就像将两个感测点相加一样。