攻撃の連続ヒット阻止の方法を1つ


まだ考え中なので、実際に使えるかどうかは分かりませんが、1つ思いついたので覚えているうちに書いておきます。


この方法とは、攻撃グループクラスを作ることです。それぞれの攻撃をすべてグループ分けして、攻撃を1セットした時、グループが同じ攻撃ならその1セットの攻撃は何度当たっても1回しかヒットしないという仕様になります。
どうやってグループ分けするのかといいますと、言葉じゃ説明できないので例を。

var a1:AttackHitArea = new AttackHitArea();    // Spriteを拡張した攻撃判定エリア
var a2:AttackHitArea = new AttackHitArea();
var a3:AttackHitArea = new AttackHitArea();

var g1:AttackGroup = new AttackGroup();        // 攻撃グループ
var g2:AttackGroup = new AttackGroup();

a1.setGroup(g1);    // 攻撃1はグループ1
a2.setGroup(g2);    // 攻撃2はグループ2
a3.setGroup(g2);    // 攻撃3はグループ2

1セットの攻撃がこのa1, a2, a3の場合、すべての攻撃がヒットした場合は2ヒットしかしません。攻撃a1, a2がヒットした場合は2ヒットします。攻撃a2, a3がどちらもヒットした場合は1ヒットしかしません。こんな仕様にしようかと思います。実際はの作り方とは違いますが、とりあえずの例として。


仕様は決まりましたが、実際にどのようなアルゴリズムで作ればいいのでしょうか。とりあえず攻撃が敵に当たったとき、設定されたAttackGroup内の、ヒット済みキャラリストにキャラのオブジェクトを登録していって、また攻撃があたったときにリストにそのキャラがすでに登録されているなら攻撃は無効...とでもすれば良さそうです。攻撃が1セット終了した時、このリストを初期化すれば大丈夫かな?
例を挙げると、上のa2がヒットした時、登録されているg2のリストを更新します。で次にa3がヒットした時、同様に登録されているg2のリストをチェックします。当然先ほど当てたキャラが登録されているので、そのキャラに攻撃がヒットしたなら攻撃は無効となります。
アルゴリズムもだいたいこれで良さそうです。初期化のタイミングは少し微妙なので、別途考えます。


# 制作中のゲームの内容で無く、作り方を紹介しているという意味不明なことをしていることに気がついた。