![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Во всех нормальных флэш играх одновременное нажатие кнопки вверх и кнопки влево обрабатывается нормально. Но у меня увы это не выходит.. Буду премного благодарен, если кто-нибудь мне объяснит причину..
Как я делаю: package gerich { import flash.display.MovieClip; import flash.events.*; import flash.ui.Keyboard; dynamic public class Spaceship extends MovieClip { var speed:Number=1; public function Spaceship() { rotation=0; stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown); addEventListener(Event.ENTER_FRAME, Update); } public function Update(e : Event):void { y-=Math.cos(rotation/180*3.14)*speed; x+=Math.sin(rotation/180*3.14)*speed; } //по идее должны отлавливаться все нажатия по очереди public function KeyDown(e : KeyboardEvent):void { if(e.keyCode == Keyboard.LEFT){trace("left"); rotation-=1;} if(e.keyCode == Keyboard.RIGHT){trace("right"); rotation+=1;} if(e.keyCode == Keyboard.UP){trace("up"); speed+=0.05;} if(e.keyCode == Keyboard.DOWN) { trace("down"); speed-=0.05; if(speed<0) speed=0; } } } } потом, не отпуская зажимаю вверх, и кнопка вправо начинает игнорироваться: а хотелось бы, чтобы я с примерно равными пеиодами времени получал бы и вверх и вправо. как-то так: Объясните, если знаете.. спасибо |
|
|||||
|
попробуйте опереться на флаги..на кейдаун флаг = тру, на кейап - фэлс
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
|
ветеран форума
|
Это особенности обработки клавиатурных событий.
И аккуратнее со множественными нажатиями стрелок, существуют комбинации, которые не работают. Было где-то хорошее исследование на эту тему, выяснилось что на разных компьютерах могут не работать разные комбинации. С этим продолжают сталкиваться: http://board.flashkit.com/board/showthread.php?t=793134
__________________
4am is time to rock |
|
|||||
|
Цитата:
![]() Добавлено через 15 минут Вот нашёл нечто похожее на Key в AS2 (KeyObject): package com.senocular.utils { import flash.display.Stage; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.utils.Proxy; import flash.utils.flash_proxy; /** * The KeyObject class recreates functionality of * Key.isDown of ActionScript 1 and 2 * * Usage: * var key:KeyObject = new KeyObject(stage); * if (key.isDown(key.LEFT)) { ... } */ dynamic public class KeyObject extends Proxy { private static var stage:Stage; private static var keysDown:Object; public function KeyObject(stage:Stage) { construct(stage); } public function construct(stage:Stage):void { KeyObject.stage = stage; keysDown = new Object(); stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed); stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased); } flash_proxy override function getProperty(name:*):* { return (name in Keyboard) ? Keyboard[name] : -1; } public function isDown(keyCode:uint):Boolean { return Boolean(keyCode in keysDown); } public function deconstruct():void { stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressed); stage.removeEventListener(KeyboardEvent.KEY_UP, keyReleased); keysDown = new Object(); KeyObject.stage = null; } private function keyPressed(evt:KeyboardEvent):void { keysDown[evt.keyCode] = true; } private function keyReleased(evt:KeyboardEvent):void { delete keysDown[evt.keyCode]; } } } |
|
|||||
|
ветеран форума
|
Цитата:
__________________
4am is time to rock |
|
|||||
|
Попробовал сделать как советовали, получилось, что-то вроде этого.
главное что работает. package { import flash.display.MovieClip; import flash.events.*; import flash.ui.Keyboard; dynamic public class Key extends MovieClip {; var aKey:Array = []; public function Key() { stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyDown); stage.addEventListener(KeyboardEvent.KEY_UP, KeyUp); } public function KeyDown(e : KeyboardEvent):void { if (e.keyCode == Keyboard.RIGHT) { aKey[0] = "RIGHT"; } if (e.keyCode == Keyboard.UP) { aKey[1] = "UP"; } if (aKey.indexOf("RIGHT") > -1) { trace("RIGHT"); } if (aKey.indexOf("UP") > -1) { trace("UP"); } } public function KeyUp(event : KeyboardEvent):void { if (event.keyCode == Keyboard.RIGHT) { aKey[0] = ""; } if (event.keyCode == Keyboard.UP) { aKey[1] = ""; } } } }
__________________
Книги и желание лучшие учителя. |
|
|||||
|
Цитата:
__________________
Дело не в тебе |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:43. |
|
|
« Предыдущая тема | Следующая тема » |
| Теги |
| KeyboardEvent , клавиатура |
|
|