सबसे पहले, 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
कुंजी दबाने के लिए दोबारा जांचता है।
स्रोत
2012-12-06 15:03:52
आप गेम लूप के बाद सभी कीबोर्ड प्रेस साफ़ करना चाह सकते हैं। यह भी देखें https://github.com/sethladd/bad-aliens-dart जो मुझे अब एहसास है मुझे शायद अपडेट करने की आवश्यकता है :) –
मैंने डार्ट में गेम के लिए कीबोर्ड हैंडलिंग पर एक लेख लिखा है: http://dartgamedevs.org/ब्लॉग/2012/12/11/कीबोर्ड-इनपुट/ – Cutch
@ कच लिंक मर चुका है। शायद यह: https://github.com/dartgamedevs/dartgamedevs.org/blob/master/source/_posts/2012-12-11-keyboard-input.markdown – Amsakanna