2017-04-19 32 views
0

私は、アイドル状態、歩行状態、旋回状態、ジャンプ状態、攻撃状態、ダンス状態で、複数のアニメーションを持つキャラクター(myHero)を持っています。 私が使用しているコードでは、アニメーション全体が機能するようにボタンを押したままにしておく必要があります(歩いているときはうまくいきましたが、例えば攻撃したいときはボタンを一度押して全体のアニメーションも一度に再生されます) 現在のところ、アニメーションを再生するにはボタンを押し続ける必要があります。私はキーを押し下げすること続けなければならない。これによりActionScript3.0ボタンを押した後に文字アニメーションを停止する

var keyRight:Boolean=false; 
var keyLeft:Boolean=false; 
var keyUp:Boolean=false; 
var keyAttack:Boolean=false; 
var keyDance:Boolean=false; 


myHero.gotoAndStop(1);//the idle animation 

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown_Handler) 
function keyDown_Handler(event:KeyboardEvent):void 
{ 

    if(event.keyCode == Keyboard.X) 
    { 
     keyAttack=true; 
    } 
//theres more code for the other keys all similar to this 

} 

stage.addEventListener(KeyboardEvent.KEY_UP, keyUp_Handler) 
function keyUp_Handler(event:KeyboardEvent):void 
{ 

    if(event.keyCode == Keyboard.X) 
    { 
     myHero.gotoAndStop(1);//the idle animation 
     keyAttack=false; 
    } 
//theres more code for the other keys all similar to this 

} 

: これは私のコードです。

if(event.keyCode == Keyboard.X) 
{ 
    if(myHero.Attack.currentFrame==8)//the animation is 8 frames long 
    { 
     myHero.gotoAndStop(1);//the idle animation 
     keyAttack=false; 
    } 
} 

をしかし、私は別のキーとそれをキャンセルしない限り、私は、キーを押したときに、今のアニメーションは永遠にループ:だから私はkeyDown_Handerにこれを追加しようとしました。 stop()を追加しようとしました。アニメーションの最後のフレームに移動しますが、最後のフレームでフリーズし、私が望むようにアイドル状態に戻りません。

助けが必要ですか?

+1

実際に攻撃のアニメーションをどのように開始するのかはわかりません。 (Xを押してアイドルフレームに行き、 'keyAttack'を' false 'に設定します)。あなたの主人公の構造を明らかにしてください、その中にあなたの子供MovieClipがAttackと呼ばれるように見えますか? – BadFeelingAboutThis

+0

myHeroには6つの異なるキーフレームがあり、それぞれに異なるアニメーションが含まれています。それで意味があるならば、それぞれのキーフレームは異なるボタンによってトリガーされますか?私は、キーが押されたときに真であり、押されていないときには偽であるようにブール値を設定します。 – DJmangoLORD

+0

彼はアニメーションの状態を処理するために何かをしたいと思う。 再生攻撃アニメーション - >攻撃アニメーションが終了したとき - >再生アイドル – Nambew

答えて

0

押して離してアニメーションを終了させるキーボードキーのいずれかを選択することができます。ブール値を設定し、アイドルフレームに移動するようにアニメーションに指示しないでください。そのため、攻撃キーの場合は、keyAttackブール値をfalseに設定するだけです。

stage.addEventListener(KeyboardEvent.KEY_UP, keyUp_Handler) 
function keyUp_Handler(event:KeyboardEvent):void 
{ 

    if(event.keyCode == Keyboard.X) 
    { 
     keyAttack=false; 
    } 
//theres more code for the other keys all similar to this 

} 

は、その後、あなたのアニメーション(ムービークリップ)であなたは、ブールがfalseであるかどうかを確認する攻撃のための8つのフレームの終わりのためのコードの一部を持つことができます。私はアタックアニメーションが上記の例のテキストからmyHeroというMovieClipの内部にあると仮定しています。

// At the last frame of the attack animation inside myHero.Attack 
if (MovieClip(this.parent.parent).keyAttack == false){ 
    // Assumming that this.parent = myHero 
    // and this.parent.parent = the main stage where keyAttack varable lives 
    MovieClip(this.parent).gotoAndStop(1); // though I would use a frame label called ("idle") 
} else { 
    this.gotoAndPlay(1); // replay attack animation assuming that the X key is still pressed down 
} 
+0

わからないのは、攻撃アニメーションをどのように開始するかということです。また、これは、完了するまでフル・アニメーションを再生させたいキーのためのものです。 – kminke

+0

返信いただきありがとうございます@kminke!私はプログラムにコードを配置しましたが、今はエラーが発生しています(1119:参照静的型flash.display:Stageを使用して不定プロパティkeyAttackにアクセスする可能性があります)、この行がハイライト表示されます:if(stage.keyAttack == false) ;私はAS3には比較的新しいので、すべてが私の目にはかなり混乱しています。申し訳ありませんhaha – DJmangoLORD

+0

私のコードサンプルでは、​​変数がメインタイムラインに設定されていると仮定しました。どのオブジェクトにkeyAttackブール変数が設定されていますか? – kminke

関連する問題