2015-05-18 6 views
8

मैं एक खेल विकसित कर रहा हूं और मुझे यह पता लगाने में सक्षम होना चाहिए कि एक उंगली एक मूव कर रही है जबकि एक और उंगली स्क्रीन के दूसरे हिस्से को देख सकती है।एक ACTION_MOVE प्रक्रिया में है, जबकि एक अन्य अंगूठी के साथ एक स्पर्श घटना का पता लगाने के लिए कैसे करें

निम्नलिखित कोड मैं (स्क्रीन के निश्चित हिस्से पर) दोनों ACTION_MOVE पता लगाने में सक्षम हूँ और ACTION_DOWN

public boolean onTouch(View v, MotionEvent event) { 
    final int dest_x = (int) event.getX(); 
    final int dest_y = (int) event.getY(); 

    onTrackPad = dbSettings.TRACK_PAD.contains(dest_x, dest_y); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_MOVE: 
      if (onTrackPad) 
      { 
       //move character 
      }   
      break; 
     case MotionEvent.ACTION_DOWN: 
      // Fire bullets 
      break; 
    } 
    //The event was consumed 
    return true; 
} 

समस्या के साथ है कि मैं एक ही समय में आग स्थानांतरित करने के लिए और नहीं पा रहा हूँ (मुझे आग और वाइसवर्सा के लिए आगे बढ़ना बंद करना होगा)

मुझे पता है कि Android can handle multi-touch events लेकिन यह नहीं पता है कि इन घटनाओं को संसाधित करने में सक्षम होने के लिए इसका उपयोग कैसे किया जाए और साथ ही खिलाड़ी आगे बढ़ सके और आग उसी समय

मैंने getActionMasked का उपयोग किसी भी भाग्य के बिना

+0

क्या आपके मोशनवेन्ट सभी मल्टीटच जानकारी संग्रहीत नहीं कर रहे हैं ?? https://developer.android.com/training/gestures/multi.html – eduyayo

+0

@eduyayo आपने अभी भी वही लिंक शामिल किया है जैसा कि मैंने प्रदान किया है, क्या आप मुझे एक अधिक विस्तृत उत्तर प्रदान कर सकते हैं (टिप्पणी नहीं) धन्यवाद –

+0

आपको एक अलग धागे में चलने और फायरिंग निष्पादित करें या यह यूआई थ्रेड को बाधित करेगा (यदि आप इसे पहले से नहीं करते हैं)। – Manu

उत्तर

2

इस सवाल Android MotionEvent.getActionIndex() and MultiTouch

पढ़ने के बाद यह कैसे मैं इस समस्या

public boolean onTouch(View v, MotionEvent event) { 
    int dest_x ; 
    int dest_y ; 

    p = event.getActionIndex() ; 

    dest_x = (int) event.getX(p); 
    dest_y = (int) event.getY(p); 

    onTrackPad = dbSettings.TRACK_PAD.contains(dest_x, dest_y); 

    action = event.getActionMasked() ; 

    switch (action) { 
     case MotionEvent.ACTION_MOVE: 
      if (onTrackPad) 
      { 
       //move character 
      }   
      break; 
     case MotionEvent.ACTION_DOWN: 
      // Fire bullets 
      break; 
    } 
    //The event was consumed 
    return true; 
} 
0

मोशनवेन्ट में आपको आवश्यक स्पर्शों के बारे में सारी जानकारी है। event.getPointersCount() निष्पादित करके आप स्पर्शों की संख्या प्राप्त कर सकते हैं, और MotionEvent.ACTION_DOWN के बजाय MotionEvent.ACTION_POINTER_2_DOWN जांचने का प्रयास करें। प्रत्येक स्पर्श के निर्देशांक प्राप्त करने के लिए आप event.getX(0) और event.getX(1) का उपयोग कर सकते हैं, वही y के लिए है। यदि आपके पास 2 स्पर्शों के साथ MotionEvent.ACTION_MOVE का मामला है, तो आपको यह जानकारी आपकी गति घटना में प्राप्त होगी।

+0

ACTION_POINTER_2_DOWN को API स्तर 8 में बहिष्कृत किया गया था। ACTION_POINTER_DOWN से जुड़े डेटा इंडेक्स को पुनर्प्राप्त करने के लिए ACTION_POINTER_INDEX_MASK का उपयोग करें। मैंने इस दृष्टिकोण की कोशिश की है लेकिन काम नहीं कर रहा है –

0

कोड के नीचे की कोशिश हल है। जब एकाधिक पॉइंटर्स स्क्रीन पर छूते हैं, तो सिस्टम एक्शन इवेंट जेनरेट करता है। हम पॉइंटर आईडी का उपयोग करके गति ईवेंट में व्यक्तिगत पॉइंटर्स का ट्रैक रख सकते हैं। सूचक आईडी स्पर्श घटनाओं में बनी रहती है और पूरे संकेत में व्यक्तिगत सूचक को ट्रैक करने की अनुमति भी देती है।

 @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      int index = event.getActionIndex(); 

      int pointerID = event.getPointerId(index); 

      int action = event.getActionMasked(); 

      if(event.getPointerCount() > 1) 
      { 
       Log.i("TouchType ", "Multi Touch"); 
       for(int i = 0; i < event.getPointerCount(); i++) 
       { 
        performAction(action); 
       } 
      }else 
      { 
       Log.i("TouchType ", "Single Touch"); 
       performAction(action); 
      } 

     return true; 
     } 


    public void performAction(int action){ 
    switch(action) 
    { 
    case MotionEvent.ACTION_DOWN : 
     Log.i("OnTouch ", "Pressed"); 

     // Fire bullets 
    break; 
    case MotionEvent.ACTION_MOVE : 
     Log.i("OnTiouch", "move"); 
     //move character 
     break; 
    case MotionEvent.ACTION_UP : 
     Log.i("OnTiouch", "Up"); 
    break; 
    default: 
     Log.i("OnTiouch", "None"); 
    } 
} 
+0

आपके उत्तर के लिए धन्यवाद लेकिन मैंने पहले ही इस समस्या को अपने उत्तर में दिए गए कोड से हल कर लिया है –

संबंधित मुद्दे

 संबंधित मुद्दे