libgdx

2013-02-12 13 views
7

में जेस्चरडेटेक्टर मैं libgdx में नया हूं। मुझे निम्न समस्या है। मैं अपने खेल के लिए चुटकी ज़ूम करना चाहता हूं। इसके लिए मेरे GameStage में GestureDetectorListener वर्ग है।libgdx

OrthographicCamera camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
this.setCamera(camera); 


GestureDetector gestureDetector = new GestureDetector(20, 0.5f, 2, 0.15f, new GestureDetectorListener()); 
Gdx.input.setInputProcessor(gestureDetector); 

class GestureDetectorListener implements GestureListener { 
    float initialScale = 1; 

    @Override 
    public boolean touchDown(float x, float y, int pointer, int button) { 
     initialScale = camera.zoom; 
     return true; 
    } 

    @Override 
    public boolean tap(float x, float y, int count, int button) { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public boolean longPress(float x, float y) { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public boolean fling(float velocityX, float velocityY, int button) { 
     // TODO Auto-generated method stub 
     return true; 
    } 

    @Override 
    public boolean pan(float x, float y, float deltaX, float deltaY) { 
     return true; 
    } 

    @Override 
    public boolean zoom(float initialDistance, float distance) { 
     float ratio = initialDistance/distance; 
     camera.zoom = initialScale * ratio; 
     return true; 
    } 

    @Override 
    public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, 
      Vector2 pointer1, Vector2 pointer2) { 
     // TODO Auto-generated method stub 
     return true; 
    } 

} 

इसके अलावा मैं अपने मंच के अभिनेता के लिए InputListener निर्धारित किया है ताकि उन्हें खींचें करने के लिए में,:

GameStage में मैं GestureDetector के लिए निम्न कोड की है। समस्या यह है कि, जब मैं InputProcessor से GestureDetector सेट करता हूं, तो मेरे अभिनेताओं को खींचना काम नहीं कर रहा है। मैं कैमरे और GestureDetector के साथ एक चुटकी ज़ूमिंग करना चाहता हूं, लेकिन इसका ड्रैगिंग पर कोई प्रभाव नहीं पड़ेगा। मैं उसे कैसे कर सकता हूँ?

कोई मदद कृपया! धन्यवाद।

उत्तर

8

CodeNoob सही रास्ते पर है, लेकिन मुझे लगता है कि आप अलग चीजों की संरचना करने के लिए कर सकते हैं।

आप एक InputMultiplexer दोनों एक वैश्विक GestureListener और अपने मंच के श्रोता स्थापित करने के लिए उपयोग कर सकते हैं:

GestureDetector gd = ... 
Stage myStage = ... 
InputMultiplexer im = new InputMultiplexer(gd, myStage); // Order matters here! 
Gdx.input.setInputProcessor(im); 

दूसरी बात बाहर देखने के लिए सभी boolean अपने इनपुट श्रोताओं में तरीकों पर वापसी मान है। कोई भी जो "सत्य" लौटाता है, वह इस कार्यक्रम को "हैंडल" के रूप में चिह्नित करेगा और मल्टीप्लेक्सर घटना को अपने सहकर्मी को पास नहीं करेगा। साथ ही, मल्टीप्लेक्सर में इनपुट प्रोसेसर का क्रम एक फर्क पड़ता है (क्योंकि यह अंतर्निहित इनपुट प्रोसेसर से ईवेंट छुपा सकता है)। तो, आपके उदाहरण में 'सत्य' लौटने वाले स्वत: जेनरेट किए गए स्टब्स, घटनाओं का एक गुच्छा "खाएंगे"। यदि यह हैंडलर मल्टीप्लेक्सर में पहला है, तो यह मंच से घटनाओं को छुपाएगा।

+0

धन्यवाद! तुम सही हो। "सच वापसी" समस्या थी। और अब खींच रहे हैं और ज़ूमिंग काम कर रहे हैं। लेकिन मैं चाहता हूं कि ज़ूमिंग पूरे चरण को प्रभावित न करे, लेकिन कुछ कंटेनर पर। मुझे लगता है कि मैं कैमरे का उपयोग नहीं कर सकता, क्योंकि कैमरा पूरे चरण के लिए सेट है। – Karmar

+0

आप इसके बारे में क्या सोचते हैं? क्या मैं कैमरे को कुछ कंटेनर के लिए सेट कर सकता हूं, पूरे चरण में नहीं? धन्यवाद। – Karmar

+0

सही, कैमरे को बदलने से बदलता है कि आपकी मॉडल स्पेस को पूरी स्क्रीन पर कैसे मैप किया गया है, इसलिए यह सिर्फ एक कंटेनर ज़ूम करने के लिए बिल्कुल सही नहीं है। –

3

आप एक InputMultiplexer InputMultiplexer myInputMultiplexer = new InputMultiplexer()

बनाने के लिए तो फिर तुम InputMultiplexer (myInputMultiplexer.addProcessor()) करने के लिए अपने दोनों GestureDetector और InputListener जोड़ने की जरूरत है।

और अंत में, आप इस तरह मुख्य InputProcessor रूप बहुसंकेतक सेट करने के लिए: Gdx.input.setInputProcessor(myInputMultiplexer)

+0

मेरा मानना ​​है कि 'इनपुट मल्टीप्लेक्सर 'को केवल' स्टेज 'के बाहर श्रोताओं को मल्टीप्लेक्स करने की आवश्यकता है। प्रश्नकर्ता के पास मंच के अंदर एक श्रोता है, और बाहर एक श्रोता है। –

+0

आपके उत्तरों के लिए धन्यवाद। मैंने इनपुट मल्टीप्लेक्सर के साथ समस्या हल की। – Karmar