2013-03-03 8 views
8

touch area http://imageshack.us/a/img836/2909/swipe1.pngLibGDX - स्वाइप अप या दाएं स्वाइप करें और आदि प्राप्त करें?

हरे रंग के क्षेत्र में उपयोगकर्ता ऊपर, दाएं, नीचे, बाएं स्वाइप कर सकते हैं। अब मैं कैसे प्राप्त कर सकता हूं उदा। स्वाइप करना? या नीचे स्वाइप करें? या दाएं स्वाइप करें या बाएं स्वाइप करें? उदा। एक स्ट्रिंग कैसे प्राप्त करें -> इनपुट = getSwiped(); -> इनपुट तो ऊपर, या सही, या नीचे, या

छोड़ दिया है और उपयोगकर्ता दो बटन छू सकता है। 1 या 2. 1 बतख के लिए है और 2 कूद के लिए है।

मैं एक ही समय में इस आदानों जाँच करना चाहते हैं। उपयोगकर्ता एक ही पल में स्पर्श कर सकते हैं और स्वाइप भी कर सकते हैं।

मैं जानता हूँ कि एक GestureDetector है। मैंने कोड को देखा, लेकिन कोई सुराग मैं स्वाइप भाग का उपयोग कैसे कर सकता हूं।

मैं थोड़ा जानते हैं कि कैसे बटन की जाँच करने के। समस्या केवल यहाँ है -> एक ही समय में आदानों की जाँच कैसे करें और कैसे स्वाइप अप मिलता है, या दाएं स्वाइप आदि

मैं एक पाया खोज की जांच करने का तरीका Multitouching:

for (int i = 0; i < 10; i++) { 
    if (Gdx.input.isTouched(i) == false) continue; 
    float x = Gdx.input.getX(i); 
    float y = Gdx.graphics.getHeight() - Gdx.input.getY(i) - 1; 
    //... 
} 

उत्तर

17

This एक समझाने एक स्वाइप की दिशा का पता लगाने के लिए एक प्रणाली को लागू करने के लिए बहुत अच्छा तरीका है। मैं इसे यहाँ पोस्ट करेंगे क्योंकि लेख भविष्य में खो दिया जा सकता:

एक वर्ग के नाम SimpleDirectionGestureDetector

public class SimpleDirectionGestureDetector extends GestureDetector { 
public interface DirectionListener { 
    void onLeft(); 

    void onRight(); 

    void onUp(); 

    void onDown(); 
} 

public SimpleDirectionGestureDetector(DirectionListener directionListener) { 
    super(new DirectionGestureListener(directionListener)); 
} 

private static class DirectionGestureListener extends GestureAdapter{ 
    DirectionListener directionListener; 

    public DirectionGestureListener(DirectionListener directionListener){ 
     this.directionListener = directionListener; 
    } 

    @Override 
    public boolean fling(float velocityX, float velocityY, int button) { 
     if(Math.abs(velocityX)>Math.abs(velocityY)){ 
      if(velocityX>0){ 
        directionListener.onRight(); 
      }else{ 
        directionListener.onLeft(); 
      } 
     }else{ 
      if(velocityY>0){ 
        directionListener.onDown(); 
      }else{         
        directionListener.onUp(); 
      } 
     } 
     return super.fling(velocityX, velocityY, button); 
    } 

} 

} 

LibGdx आवेदन के बनाने() फ़ंक्शन पर बनाएं, इस डाल के लिए से निपटने के इशारे सक्रिय करने के लिए अपने खेल:

Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() { 

@Override 
public void onUp() { 

} 

@Override 
public void onRight() { 

} 

@Override 
public void onLeft() { 

} 

@Override 
public void onDown() { 

} 
})); 
+1

मैं अपने खेल में इस का उपयोग कर रहा है, समस्या है जब भी मैं किसी भी दिशा खेल कुछ समय के लिए रुकती में स्वाइप (कुछ समय मैं मिलीसेकेंड में मतलब द्वारा, लेकिन यह ध्यान देने योग्य है)। क्या इसे ठीक करने का कोई तरीका है? –

+0

यह असंभव को पता है क्यों ऐसा होता है अगर तुम न, कोड पता चलता है कि नहीं होना चाहिए – Lestat

+0

मुझे आश्चर्य है कि क्यों यह अभी भी Libgdx में नहीं जोड़ा गया है हो सकता है। बीटीडब्लू, यदि आप स्वाइप जेस्चर (उदाहरण के लिए इनपुट मल्टीप्लेक्सर ऑर्डर द्वारा) का उपभोग करना चाहते हैं तो आपको 'फ़्लिंग' विधि से 'सत्य' वापस करने की आवश्यकता है – Enigo

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

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