2016-05-04 2 views
0

まず、この愚かな質問を申し訳ありません(私はAS3で新しくなっています)。私はこの問題を2週間以上無駄にして、ここにそれを掲示しています。1つのキーでフルMcを再生

私は英雄をキーボードで動かしています。私は3つのアニメーションを持っています。

背後

  1. スタンバイモード
  2. 徒歩フロント
  3. 徒歩それは今のところうまく機能していますが、私はプレーヤーをジャンプに直面しています問題は、ジャンプするキーを押したままにする必要がされます。私は、飛び降りをするために鍵を保持することをプレイヤーに要求されたくない。 私は1つのキーを押すだけで完全なMovieClipを再生したいと思います。正直なところ、使用する機能や操作方法がわかりません。

    Here is the file、ここでは私のコード

    import flash.display.Stage; 
    import flash.events.KeyboardEvent; 
    import flash.ui.Keyboard; 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    
    kim.gotoAndStop("kim Stand"); 
    
    var grav:int = 0; 
    var floor = 450; 
    var dPressed:Boolean = false; 
    var aPressed:Boolean = false; 
    var jumping: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.A) 
         { 
          aPressed = true; 
         } 
        else if (Devent.keyCode == Keyboard.W && !jumping) 
         { 
          jumping = true; 
         } 
    } 
    
    function KeyUpHandaler (Uevent:KeyboardEvent):void 
    { 
        if (Uevent.keyCode == Keyboard.D) 
         { 
          dPressed = false; 
          kim.gotoAndStop("kim Stand"); 
         } 
        else if(Uevent.keyCode == Keyboard.A) 
        { 
          aPressed = false; 
          kim.gotoAndStop("kim Stand"); 
        } 
    
        else if(Uevent.keyCode == Keyboard.W) 
        { 
          jumping = false; 
          kim.gotoAndStop("kim Stand"); 
        } 
    
    
    } 
    
    function gameLoop(Levent:Event):void 
    { 
        if (dPressed) 
         { 
          kim.x += 5; 
    
          kim.gotoAndStop("kim Move Right"); 
         } 
        else if(aPressed) 
         { 
          kim.x -= 5; 
          kim.gotoAndStop("kim Move Left"); 
         } 
    
        else if(jumping) 
         { 
          kim.gotoAndStop("kim Jump"); 
          kim.y -= 10; 
    
         } 
    
        gravity(); 
    
    } 
    
    function gravity():void 
        { 
         kim.y += grav; 
         if (kim.y+kim.height/2 <floor){ 
          grav++; 
         } 
    
         else { 
          grav = 0; 
          kim.y = floor - kim.height/2 ; 
    
          } 
    
        } 
    

答えて

1

はあなたが状態ベースのロジックを試してみたいことがあります。キーボードイベントによって設定され、文字を更新するアクションはgameLoop()で個別に処理されます。パズルの最後の部分は、あなたが着陸したことを認識したときの状態を更新することです(キーボードの相互作用ではなく重力機能から発生するもの)。

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

var grav:int = 0; 
var floor = 450; 
var state:String = "stand"; 

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

function keyHandler(e:KeyboardEvent):void { 
    switch (e.keyCode) { 
     case Keyboard.D: 
      state = (e.type == "keyDown") ? "right" : "stand"; 
      break; 
     case Keyboard.A: 
      state = (e.type == "keyDown") ? "left" : "stand"; 
      break; 
     case Keyboard.W: 
      state = (e.type == "keyDown") ? "jumping" : "falling"; 
      break; 
    } 
} 

function gameLoop(Levent:Event):void { 
    switch (state) { 
     case "stand": 
      kim.gotoAndStop("kim Stand"); 
      break; 
     case "right": 
      kim.x += 5; 
      kim.gotoAndStop("kim Move Right"); 
      break; 
     case "left": 
      kim.x -= 5; 
      kim.gotoAndStop("kim Move Left"); 
      break; 
     case "jumping": 
      kim.y -= 10; 
      kim.gotoAndStop("kim Jump"); 
      break; 
     case "falling": 
      kim.gotoAndStop("kim Jump"); 
      break; 
    } 

    gravity(); 
} 

function gravity():void { 
    kim.y += grav; 
    if (kim.y + kim.height/2 < floor) { 
     grav++; 
    } else { 
     grav = 0; 
     kim.y = floor - kim.height/2; 

     if (state == "falling") { 
      state = "stand" 
     } 
    } 
} 
関連する問題