2016-05-14 3 views
0

私はヒーローが実行され、障害に直面し、ジャンプとスライドで障害物を進めるランニングゲームを作っています。どのようにアクティブなマルチキーボールas3で

ヒーローはユーザーDを押しても実行され、固定小数点まで実行されますが、ヒーローがもう一方のボタンを実行すると問題が発生すると、W = jumpS = slideは機能しません。

ヒーローの実行中にこの2つのボタンが機能します。あなたがelse ifステートメントを使用しているため

は、ここに私のコード

import flash.display.Stage; 
import flash.events.KeyboardEvent; 
import flash.ui.Keyboard; 
import flash.display.MovieClip; 
import flash.events.Event; 

kim.gotoAndStop("hero Stand"); 

var dPressed:Boolean = false; 
var aPressed:Boolean = false; 
var jumping:Boolean = false; 
var sPressed:Boolean = false; 

stage.addEventListener(KeyboardEvent.KEY_DOWN , keyDownHandaler); 
stage.addEventListener(KeyboardEvent.KEY_UP , KeyUpHandaler); 
stage.addEventListener(Event.ENTER_FRAME , gameLoop); 

function keyDownHandaler(Devent:KeyboardEvent):void 
{ 
     if (Devent.keyCode == Keyboard.D) 
      { 
       dPressed = true; 
      } 

     else if (Devent.keyCode == Keyboard.S && !jumping && !sPressed) 
      { 
       sPressed = true; 
      } 
     else if (Devent.keyCode == Keyboard.W && !jumping && !sPressed) 
      { 
       jumping = true; 
      } 

function KeyUpHandaler (Uevent:KeyboardEvent):void 
{ 
    if (Uevent.keyCode == Keyboard.D) 
     { 
      //dPressed = false; (i commented this so that hero don't stop running) 
      //hero.gotoAndStop("hero Stand"); 
     } 

    else if(Uevent.keyCode == Keyboard.W) 
    { 
      jumping = false; 
      hero.gotoAndStop("heroStand"); 
    } 

    else if(Uevent.keyCode == Keyboard.S) 
    { 
      sPressed = false; 
      hero.gotoAndStop("hero Stand"); 
    } 
} 

function gameLoop(Levent:Event):void 
{ 
    if (dPressed) 
     { 
     hero.x += 10; 
     hero.gotoAndStop("hero Run"); 
     } 

    else if(jumping) 
     { 
      hero.y -= 15; 
      hero.x += 10; 
      hero.gotoAndStop("hero Jump"); 
     } 

    else if(sPressed) { 

      hero.x += 10; 
      hero.gotoAndStop("hero Slide"); 
      } 
    } 

答えて

0

です。代わりに、別のifステートメントを使用してください。 AS3は真の条件を見つけるために必要な限り論理ブロックelse ifを読み込み、その時点でそのビットを実行してelse ifステートメントの最後に出て、の後ろのすべてをスキップします。他のキーが押されているかどうかに関係なく、すべての条件をテストしたい場合(彼が実行中ですか?ジャンプしていますか?)、ifステートメントを使用してください。以前の条件がfalseの場合にのみを実行するコードを予約する場合は、else ifを使用してください。あなたのケースに

私は彼が実行されている場合にのみ、プレイヤーがスライドできるようにしたい想像だろうがないジャンプ、右?これは次のようになります。

If (dPressed) { 
    hero.x += 10; 
    hero.goToAndPlay("hero run"); 
} 
If (jumping) { // this code will run regardless of if dPressed is true 
    hero.y -= 15; 
} 
else if (sPressed) { // this code will only be read if jumping is not true (you can't jump and slide at the same time) 
    hero.goToAndStop("hero slide"); 
} 

他の論理ステートメントも同様に変更する必要があります。

私はキーボードイベントハンドラセクションでelse文を使用しません。私の考えでは、AS3は単に常に押されているキーの状態をチェックしています... gameLoop機能のロジックを処理してください。

+0

私の7つのフレームジャンプアニメーションと5つのフレームスライドアニメーションがhero.gotoAndStop( "hero Jump")を再生していないので、ジャンプやスライドのクリップが再生されていません。 and hero.gotoAndStop( "ヒーロースライド");それはちょうど最初のフレームに行き、それのようにとどまり、終了後にそれは実行に戻る。どのようなアイデアが問題ですか? –

+0

goToAndPlayを使用しないgoToAndStop –

+0

申し訳ありません私は何度も同じ結果を試しました –

関連する問題