2017-01-31 8 views
1

スペースシューターを作成しています。私は、スペースバーと方向キーが同時に押されたときに、私がどのようにしてムービークリップ(銃砲フラッシュ)をコーディング/実行できるかを調べようとしています。 ダブルキープレスas3でヒーローをアニメ化するFlash Pro CS6

この

には、Flash自体の中にキーフレームを使用して、私のAS2のコードだった:

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

これはFlash自体のキーフレームを使用した私のAS2コードでした:if(Key.isDown(Key.SPACE)){ this50AndStop( "20"); } \t else { this.gotoAndStop( "idle"); } \t \t 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"); } など... –

+0

2つの条件をリンクするために '&&'演算子を使用してみましたか? 'if(event.keyCode == 40 && event.keyCode == 45)のようなもの{何かをする; } '40&45を左矢印キーとスペースキーの正しいキーコードに置き換えます。また、正しいAS3構文を確認してください(修正するのに役立つAS3コードは表示されませんでした)... –

+0

@ VC.One私はイベントリスナーについてまだ学んでいないと推測します。 –

答えて

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); 
}); 

それへのキーが評価されていますキーが2つのKeyboard event listenersで押された後、フレームの最後に、収集されたすべてのデータに従ってムービークリップを更新します。私はこれが重要だと思います。なぜなら、宇宙船が最終的に動くとき、それは間違いなく最新の状態にあることを知っているからです。

Iはまた、宇宙船と敵かもしれないとの間の距離を計算するための宇宙船とVector3D.distance()に速度を印加するようVector3D.scaleBy()などのオブジェクトの動きを計算するための多くの有用な特性を有するように宇宙船の速度を格納するVector3Dを使用します距離に関連して武器の正確さや損傷に使用することができます。

+0

完了! Zzeこれは動作します!本当にありがとう。 –

+0

@CaseyY嬉しいことですが、これがあなたの解決策を解決した場合、それを正しい答えとして受け入れて、人々が将来それがうまくいくことを知っていただけるようにしてください:) – Zze