0

フラッシュゲームを作っています。アニメーションが異なる 3 つの攻撃 (キーボード バインド z、x、c) を次に示します。

問題#1

たとえば、attack1 を使用すると (「z」をクリックして) ~100 フレームのアニメーションが表示されますが、アニメーション中に attack2 (x) をクリックすると、attack1 アニメーションがキャンセルされ、attack2 アニメーションの再生が開始されます。アニメーション中にそれを作成する必要があります。他のアニメーションを使用して中断することはできません。

問題#2

(「z」をクリックして)attack1を使用し、「z」ボタンを放すまで「z」アニメーションがフリーズします。一度攻撃ボタンをクリックすると、アニメーションの再生が開始され、同じボタンをクリックしても中断/一時停止できなくなります。

すべての攻撃で、最後のフレームのムービークリップに、MovieClip(this.parent).gotoAndStop("stay");攻撃アニメーションが再生された後に「滞在」アニメーションの再生を開始するコードを追加しました (この部分は機能しています)。

key_down 関数:

private function key_down(event:KeyboardEvent)
{
    if (event.keyCode == 90)
    {
        attack1 = true;
    }
    if (event.keyCode == 88)
    {
        attack2 = true;
    }
    if (event.keyCode == 67)
    {
        attack3 = true;
    }

}

key_up 関数:

private function key_up(event:KeyboardEvent)
{

    if (event.keyCode == 90)
    {
        attack1 = false;
    }
    if (event.keyCode == 88)
    {
        attack2 = false;
    }
    if (event.keyCode == 67)
    {
        attack3 = false;
    }
}

startAttack() 関数

private function startAttack() {

            if (attack1)
            {
                Hero.gotoAndStop("attack1");
            }
            if (attack2)
            {
                Hero.gotoAndStop("attack2");
            }
            if (attack3)
            {
                Hero.gotoAndStop("attack3");
            }
}
4

3 に答える 3

1

あなたのコードでは、ヒーローは同時に 3 つの方法で攻撃できますが、私が理解している限り、あなたはそれを望んでいません。では、なぜ 3 つの個別の変数を作成したのでしょうか。1 つ作成し、'attack' という名前を付けます。その値は攻撃タイプの数になります。攻撃の番号をキーコードにマップする配列を作成することもできます:

var codes:Array = new Array(0, 90, 88, 67);
var attack:Number = 0;

key_up および key_down 関数で使用します。これで、関数に追加の if を作成することなく、新しい攻撃を追加できます。

キーダウン:

if(attack > 0) return; // don't interrupt other attack
for(var c in codes) {
  if(codes[c] == event.keyCode) {
      attack = c;
      Hero.gotoAndStop("attack" + attack);
  }
}

キーアップ:

for(var c in codes) {
  if(codes[c] == event.keyCode) {
      if(c == attack) attack = 0;
  }
}

startAttack() は冗長です。

于 2013-09-20T12:14:12.400 に答える