2012-12-06 12 views
10

मुझे पता है कि आप कुंजी दबाएँ और तरह डार्ट के साथ घटनाओं नीचे सुन सकते हैं:खेलों के लिए डार्ट में दोबारा प्रेस प्रेस को कैसे सुनें?

var el = query('#el'); 
el.on.keyDown.add((e) {}); 

लेकिन समस्या यह यहाँ है कि यह केवल एक बार सक्रिय करता है। मुझे पुनरावृत्ति चाहिए।

तो, मैंने keyPress की बजाय कोशिश की, लेकिन पुनरावृत्ति से पहले इसमें थोड़ी देर हो गई है। मैं एक खेल पर काम कर रहा हूं और मैं इसे तुरंत और दोबारा आग लगाना चाहता हूं।

उत्तर

24

सबसे पहले, keyPress घटनाओं को न सुनें, क्योंकि "प्रारंभिक देरी" ऑपरेटिंग सिस्टम कॉन्फ़िगरेशन पर निर्भर करती है! वास्तव में, keyPress घटनाएं भी दोबारा आग लग सकती हैं।

आपको keyDown और keyUp ईवेंट सुनने के लिए क्या करना है। आप इसके लिए एक सहायक बना सकते हैं।

class Game { 
    Keyboard keyboard; 

    Game() { 
    keyboard = new Keyboard(); 

    window.requestAnimationFrame(update); 
    } 

    update(e) { 
    if (keyboard.isPressed(KeyCode.A)) 
     print('A is pressed!'); 

    window.requestAnimationFrame(update); 
    } 
} 

:

class Keyboard { 
    HashMap<int, int> _keys = new HashMap<int, int>(); 

    Keyboard() { 
    window.onKeyDown.listen((KeyboardEvent e) { 
     // If the key is not set yet, set it with a timestamp. 
     if (!_keys.containsKey(e.keyCode)) 
     _keys[e.keyCode] = e.timeStamp; 
    }); 

    window.onKeyUp.listen((KeyboardEvent e) { 
     _keys.remove(e.keyCode); 
    }); 
    } 

    /** 
    * Check if the given key code is pressed. You should use the [KeyCode] class. 
    */ 
    isPressed(int keyCode) => _keys.containsKey(keyCode); 
} 

तो क्या आप अपने खेल में क्या पर निर्भर करता है, तो आप शायद किसी प्रकार की "एक खेल पाश", अपने update() विधि हर में कहा जाता हो जाता है कि एक बार एक समय में एक में है अब आपका गेम लूप A कुंजी दबाने के लिए दोबारा जांचता है।

+0

आप गेम लूप के बाद सभी कीबोर्ड प्रेस साफ़ करना चाह सकते हैं। यह भी देखें https://github.com/sethladd/bad-aliens-dart जो मुझे अब एहसास है मुझे शायद अपडेट करने की आवश्यकता है :) –

+0

मैंने डार्ट में गेम के लिए कीबोर्ड हैंडलिंग पर एक लेख लिखा है: http://dartgamedevs.org/ब्लॉग/2012/12/11/कीबोर्ड-इनपुट/ – Cutch

+0

@ कच लिंक मर चुका है। शायद यह: https://github.com/dartgamedevs/dartgamedevs.org/blob/master/source/_posts/2012-12-11-keyboard-input.markdown – Amsakanna

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