আমি টিউটোরিয়ালগুলি পড়তে এবং এখান থেকে এবং স্ট্যাকওভারফ্লো সম্পর্কিত মাল্টি টাচ সম্পর্কিত প্রতিটি প্রশ্নের সন্ধানে অগণিত ঘন্টা ব্যয় করেছি। তবে সঠিকভাবে এটি কীভাবে করা যায় আমি ঠিক তা বুঝতে পারি না। আমি পেতে একটি লুপ ব্যবহার করি 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);
আমি কী ভুল করছি তার নিখুঁত ক্ষতি না করতে চাইলে এই কোডটি খুব বেশি পোস্ট করতে চাই না। মাল্টিটোচিং কীভাবে কাজ করে তা আমি সহজেই বুঝতে পারি না।
basicly পর্যন্ত movingPoint
উভয় আমার প্রথম ও দ্বিতীয় আঙুল জন্য পরিবর্তন। আমি এটিকে একটি বাক্সে আবদ্ধ করি, তবে যতক্ষণ আমি এই বাক্সের মধ্যে একটি আঙুল ধরে থাকি, এটি আমার দ্বিতীয় আঙুলটি কোথায় স্পর্শ করে তার ভিত্তিতে এটির মান পরিবর্তন করে। এটি সঠিক দিকে চলে যায় এবং কিছুই ত্রুটি দেয় না, সমস্যাটি গতি-পরিবর্তন, প্রায় এটির মতোই এটি দুটি স্পর্শকারী পয়েন্টগুলিকে যুক্ত করে।