Tôi đã dành vô số giờ để đọc hướng dẫn và xem xét mọi câu hỏi liên quan đến multiTouch từ đây và Stackoverflow. Nhưng tôi không thể tìm ra cách để làm điều này một cách chính xác. Tôi sử dụng một vòng lặp để có được cái của mình pointerId
, tôi không thấy nhiều người làm việc này nhưng đó là cách duy nhất tôi quản lý để làm cho nó hoạt động được phần nào.
Tôi có hai cần điều khiển trên màn hình, một để di chuyển và một để điều khiển xoay vòng xoay của tôi và góc anh ta bắn, giống như trong Monster Shooter. Cả hai đều hoạt động tốt.
Vấn đề của tôi là khi tôi Di chuyển sprite của mình cùng lúc với Im chụp, touchingPoint
chuyển động của tôi được đặt ở chế touchingPoint
độ chụp của tôi, vì x
và y
cao hơn ở lần touchingPoint
chụp của tôi ( moving-stick
ở bên trái màn hình, shooting-stick
ở bên phải) , sprite của tôi tăng tốc, điều này tạo ra một sự thay đổi không mong muốn về tốc độ cho sprite của tôi.
đây là cách tôi giải quyết nó với sự giúp đỡ của bạn đây là cho bất cứ ai có thể gặp phải một vấn đề tương tự:
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);
Sẽ không đăng nhiều mã này nếu tôi không mất hoàn toàn những gì tôi đang làm sai. Tôi chỉ đơn giản là không thể hiểu rõ về cách hoạt động của MultiTouching.
movingPoint
thay đổi cơ bản cho cả ngón tay thứ nhất và thứ hai của tôi. Tôi liên kết nó với một hộp, nhưng khi tôi giữ một ngón tay trong hộp này, nó sẽ thay đổi giá trị của nó dựa trên nơi ngón tay thứ hai của tôi chạm vào. Nó di chuyển đúng hướng và không có gì sai sót, vấn đề là sự thay đổi tốc độ, nó gần giống như nó cộng hai điểm chạm.