2017-01-31 12 views
1

Im создание космического шутера. Я пытаюсь выяснить, как я могу кодировать/запускать мой клип (флеш), когда одновременно включаются пробел и направленная клавиша.анимация героя с двойным нажатием клавиши as3 Flash Pro CS6

Это был мой AS2 код, используя ключевые кадры в самой Flash:

if(Key.isDown(Key.SPACE)){ 
    this.gotoAndStop("20"); 
} else { 
    this.gotoAndStop("idle"); 
} 

if(Key.isDown(Key.RIGHT)){ 
    this._x += 5; 
    this.gotoAndStop("6"); 
} 

if(Key.isDown(Key.SPACE)){ 
    this.gotoAndStop("20"); 
} 

if(Key.isDown(Key.LEFT)){ 
    this._x -= 5; 
    this.gotoAndStop("6"); 
} 

and so on... 
+0

Это был мой код 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"); } и т. Д. –

+0

Вы пытались использовать оператор '&&' для связывания двух условий? Что-то вроде 'if (event.keyCode == 40 && event.keyCode == 45) {Сделайте что-нибудь; } 'замените 40 и 45 правильными кодами клавиш для левой стрелки и пробела. Также дважды проверьте правильный синтаксис AS3 (вы не указали код AS3, который мы можем помочь исправить). –

+0

@ VC.One Я предполагаю, что им еще предстоит узнать о eventlisteners. –

ответ

1

Если бы это было мне, я бы сделал что-то подобное в 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() для вычисления расстояния между космическим кораблем и врагом, которые могли бы использовать для точности или повреждения оружия в зависимости от расстояния.

+0

PERFECT! Zze это работает !! огромное спасибо. –

+0

@CaseyY Glad Я мог бы помочь - если это решило ваше решение, примите его как правильный ответ, чтобы люди знали, что он хорошо работает в будущем :) – Zze