Если бы это было мне, я бы сделал что-то подобное в AS3:
stop();
var velocity: Vector3D = new Vector3D(0,0,0);
var shooting: Boolean = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN, function(evt: KeyboardEvent){
// have we moved on the X axis?
velocity.x = evt.keyCode == 37 ? -1: evt.keyCode == 39 ? 1: velocity.x;
// have we moved on the Y axis?
velocity.y = evt.keyCode == 40 ? -1: evt.keyCode == 38 ? 1: velocity.y;
// Have we shot?
shooting = evt.keyCode == 32 ? true : shooting;
});
stage.addEventListener(KeyboardEvent.KEY_UP, function(evt: KeyboardEvent){
// Have we finished moving on the X axis?
velocity.x = evt.keyCode == 37 || 39 ? 0 : velocity.x;
// Have we finished moving on the Y axis?
velocity.y = evt.keyCode == 40 || 38 ? 0 : velocity.y;
// have we finished shooting?
shooting = evt.keyCode == 32 ? false : shooting;
});
stage.addEventListener(Event.EXIT_FRAME, function(evt: Event){
// evaluate velocity and shooting and jump to the required keyframes.
trace(velocity, shooting);
});
Ключ к нему оценки, которые нажал клавишу в двух Keyboard event listeners
, а затем в конце кадра, а затем обновил мувиклип в соответствии со всеми собранными данными. Я думаю, что это важно, потому что вы знаете, что, когда космический корабль, наконец, движется, он определенно будет в самом современном состоянии.
Я также использовать Vector3D
для хранения скорости космического корабля, как это имеет многочисленные полезные свойства для расчета движения объектов, таких как Vector3D.scaleBy()
для применения скорости космического аппарата и Vector3D.distance()
для вычисления расстояния между космическим кораблем и врагом, которые могли бы использовать для точности или повреждения оружия в зависимости от расстояния.
Это был мой код AS2 с использованием ключевых кадров в самой Flash: if (Key.isDown (Key.SPACE)) { this.gotoAndStop ("20"); } \t else { это.gotoAndStop ("idle"); } \t \t if (Key.isDown (Key.RIGHT)) { this._x + = 5; this.gotoAndStop ("6"); } if (Key.isDown (Key.SPACE)) { это.gotoAndStop ("20"); } if (Key.isDown (Key.LEFT)) { это._x - = 5; this.gotoAndStop ("6"); } и т. Д. –
Вы пытались использовать оператор '&&' для связывания двух условий? Что-то вроде 'if (event.keyCode == 40 && event.keyCode == 45) {Сделайте что-нибудь; } 'замените 40 и 45 правильными кодами клавиш для левой стрелки и пробела. Также дважды проверьте правильный синтаксис AS3 (вы не указали код AS3, который мы можем помочь исправить). –
@ VC.One Я предполагаю, что им еще предстоит узнать о eventlisteners. –