2016-05-16 11 views
0

ここで問題になるのは、スペースバーを押すとアタックアニメーションが再生されますが、リリースするとすぐにアニメーションプロセスが停止します。私はボタンを押して放すだけで、アニメーションを完成させることができます。as3のフラッシュでのアタックアニメーションの問題

function keyPressed(e:KeyboardEvent):void 
    { 
     if(e.keyCode == Keyboard.RIGHT) 
      { 
      rDown = true; 
      } 
     if(e.keyCode == Keyboard.LEFT) 
      { 
      lDown = true; 
      } 
     if(e.keyCode == Keyboard.UP && onGround) 
      { 
      jumped = true; 
      } 
     if(e.keyCode == Keyboard.DOWN && onGround) 
      { 
      crouchMode = true; 
      } 
     if(e.keyCode == Keyboard.SPACE && onGround) 
      { 
       attackMode = true; 

      } 
    } 
    function keyReleased(e:KeyboardEvent):void 
    { 
     if(e.keyCode == Keyboard.RIGHT) 
      { 
      rDown = false; 
      } 
     if(e.keyCode == Keyboard.LEFT) 
      { 
      lDown = false; 
      } 
     if(e.keyCode == Keyboard.UP) 
      { 
      jumped = true; 
      } 
     if(e.keyCode == Keyboard.DOWN) 
      { 
      crouchMode = false; 
      } 
     if(e.keyCode == Keyboard.SPACE) 
      { 
      attackMode = false; 
      } 
    } 
    function gameLoop(e:Event):void 
    { 
     playerStart(); 

       } 
     } 
    } 
    function playerStart():void 
    { 
     warMage.y += grav;//Apply gravity to player 

     collisionStageCheck(); 

     if(crouchMode) 
     { 
      warMage.gotoAndStop("CrouchWarmage"); 
      rDown = false; 
      lDown = false; 
     } 
     if(attackMode) 
     { 

      if(warMage.scaleX == 1)//If we face right 
      { 
       warMage.x += 5;//Lunge right 
      } 
      if(warMage.scaleX == -1)//If we face left 
      { 
       warMage.x -= 5;//Lunge left 
      } 
      warMage.gotoAndPlay("AttackWarmage"); 
     } 
     if(rDown)//If we move right 
     { 
      warMage.x += 12; 
      warMage.gotoAndStop("RunWarmage"); 
      warMage.scaleX = 1; 
     } 
     if(lDown)//If we move left 
     { 
      warMage.x -= 12; 
      warMage.gotoAndStop("RunWarmage"); 
      warMage.scaleX = -1; 
     } 
     if(jumped)//If we jumped 
     { 
      warMage.y -= 30; 
      warMage.gotoAndStop("JumpWarmage"); 
     } 
     if(!rDown && !lDown && !jumped && !crouchMode && !attackMode)//If we are in neither states 
     { 
      warMage.gotoAndStop("idleWarmage"); 
     } 
    } 
+0

これはまさにあなたのコードがしなければならないもののようです( '(!rDown &&!lDown &&!jumped &&!crouchMode &&!attackMode)'はアニメーションをアイドルに切り替える)、解放された場合には ' 、それは助けてください。 – www0z0k

+0

リリース時にattackModeをオンにしておくと、停止することはありません。偽であるはずの別の信号を探してみようとしています。アニメーションを制御するのと同じように、他のものを探すのはかなり難しいです。 – user199845

+0

'AttackWarmage'の最後のフレームで' gotoAndStop( "idleWarmage")を追加しようとします。 – www0z0k

答えて

0

attackModeは、スペースバーkeyReleased機能にfalseに設定されているため、攻撃アニメーションが完了していません。それをしないでください。代わりに、アニメーションの最後のフレームでattackModeをfalseにします。明らかに、攻撃アニメーション「LastFrame」の最後のフレームを指定するといいでしょう

if (heroMage.currentFrame == "LastFrame") 
{ 
    attackMode = false; 
} 

:あなたのif (attackMode) {ロジックブロック内にネストされた自分のメインクラスでこれを行います。

hereeventDispatcherを使用すると、現在のフレームを確認する必要はありませんが、ムービークリップのタイムライン内にコードが入っていると思ったら少し迷惑になります。

+0

どちらかが動作しません。 – user199845

+0

私のメインクラスを通して攻撃のアニメーションタイムラインにアクセスできる方法はありますか? – user199845

+0

私は、.currentFrameを使ってメインのタイムラインですべてを行う方法を追加しました。 –

関連する問題