मैंने ट्यूटोरियल पढ़ने और मल्टीटच से संबंधित हर सवाल को देखने के लिए अनगिनत घंटे बिताए हैं। लेकिन मैं अभी यह पता नहीं लगा सकता कि यह कैसे सही ढंग से किया जाए। मैं अपना पाने के लिए एक लूप का उपयोग करता हूं pointerId
, मुझे ऐसा करने वाले बहुत से लोग दिखाई नहीं देते हैं, लेकिन इसका एकमात्र तरीका है कि मैं इसे कुछ हद तक काम करने में कामयाब रहा हूं।
मेरी स्क्रीन पर दो जॉयस्टिक्स हैं, एक हिलाने के लिए और दूसरा मेरे स्प्राइट्स रोटेशन को नियंत्रित करने के लिए और वह जिस शूट को शूट करता है, जैसे मॉन्स्टर शूटर में। ये दोनों काम ठीक हैं।
मेरी समस्या है जब मैं इम शूटिंग के रूप में एक ही समय में मेरी स्प्राइट ले जाएँ, मेरी वह यह है कि 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
मेरी पहली और दूसरी उंगली दोनों के लिए बुनियादी तौर पर परिवर्तन। मैं इसे एक बॉक्स में बांधता हूं, लेकिन जब तक मैं इस बॉक्स के भीतर एक उंगली पकड़ता हूं, यह मेरी दूसरी उंगली को छूने के आधार पर इसके मूल्य को बदल देता है। यह सही दिशा में आगे बढ़ता है और कुछ भी त्रुटि नहीं देता है, समस्या गति-परिवर्तन है, लगभग इसकी तरह यह दो टचपॉइंट जोड़ता है।