2016-07-19 11 views
-3

ウォーキングアニメーションのフレームに変更できます。私は3つのフレームを持っています。最初は(プレイヤークラスの場合)私の他のファイルにもそう}非トゥイーンas3のアニメーション(アクションスクリプト3)

package { 

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

public class main extends MovieClip { 
    var player:Player = new Player(); 

    var px = 0; 
    var py = 0; 

    public function main() { 
     stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed); 
     addEventListener(Event.ENTER_FRAME, update); 
    } 
    public function KeyPressed(e:KeyboardEvent):void { 
     //trace(e.keyCode); 
     trace(px); 
     if(e.keyCode == 38 || e.keyCode == 87) { 
      trace('w/up'); 
      py -= 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 39 || e.keyCode == 68) { 
      trace('d/right'); 
      px += 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 37 || e.keyCode == 65) { 
      trace('a/left'); 
      px -= 5; 
      moveAnimation(); 
     } 
     if(e.keyCode == 40 || e.keyCode == 83) { 
      trace('s/down'); 
      py += 5; 
      moveAnimation(); 
     } 
    } 
    public function moveAnimation():void { 
     player.gotoAndStop(2); 
     player.gotoAndStop(3); 
     player.gotoAndStop(1); 
    } 
    public function update(e:Event):void { 
     addChild(player); 
     player.x = px; 
     player.y = py; 
    } 
} 

に依然として

正常で 第二及び第三のもの)(I停止を追加し2つの歩行フレームです。それが助けば。しかし、それは動く。呼び出し関数は、それを2番目または3番目のフレームのように移動しますが、1だけを移動します。アニメーション化しません。ちょうど1つのフレームが呼び出され、スタックされます

編集:私はそれをkeyupイベントリスナーとstopAnimation()で修正しましたが、今度はキーがHELDのときは機能しません。それはあまりにも多く呼ばれて1フレームにつかまります。キーが最初に押されたときだけどうすればいいのですか?

+0

編集:キーアップイベントリスナーとstopAnimation()を使用して修正しましたが、キーがHELDのときに機能しません – Artsicle

+0

コメントに情報を追加せず、[編集]してください。 – null

+0

あなたは答えるつもりですか? – Artsicle

答えて

0

Playerクラスを変更して、状態(歩行が左、歩いている、静止している)に基づいて独自のアニメーションを制御する必要があります。私が理解しているように、ウォーキングアニメーションを表す2つのフレーム(#2と#3)しかないので、あなたのキャラクターが歩くときに、その2つを交互にする必要があります。また、PlayerscaleXのプロパティで向きが変わる必要があります。それを行うには、あなたのPlayerクラスに3つの関数を与えてから、適切な時間に呼び出してください。

public class Player extends MovieClip { 
    private var moving:Boolean=false; 
    public function Player() { 
     addEventListener(Event.ENTER_FRAME,update); 
     stop(); // just in case 
    } 
    function moveLeft():void { 
     this.scaleX=-1; 
     this.moving=true; 
    } 
    function moveRight():void { 
     this.scaleX=1; 
     this.moving=true; 
    } 
    function standStill():void { // stop() is defined in MovieClip 
     this.moving=false; 
    } 
    private function update(e:Event):void { 
     if (this.moving) { 
      if (this.currentFrame==3) { // change this if you have longer walk animation 
       gotoAndStop(2); 
      } else { 
       nextFrame(); 
      } // faking animation loop with enterframe listener 
     } else { 
      gotoAndStop(1); // display stand still 
     } 
    } 
} 

その後、あなたのリスナーでplayer.moveLeft()と他の人を呼び出すするタイミングを決定し、あまりにもplayer.standStill()を呼び出すこと。

+0

私はすでにそれを修正しました:) – Artsicle

+0

別の場所で「うまくいかない」場合はほとんど修正されません。 – Vesper

+0

これは修正です:P – Artsicle

関連する問題