念願だったHPタンクシステムを実装しました。私が勝手にそう読んでいるだけですが(❀╹◡╹)
現在のシューティングゲームではボスのHPに応じて攻撃パターンが変化するものがほとんどです。様々な言語のチュートリアルサイトでその実装方法が掲載されています。しかしその全て(私が見た中では)が初期HPに対する割合で変化させるものでした。
初期HPの80%〜100%の間 攻撃パターン1
初期HPの60%〜 80%の間 攻撃パターン2
・・・
・・・
これが基本的な手法ですが、後から攻撃パターンの持続時間を変更したくなった時に全部の数値を替えなければいけません。
なので、各段階ごとにHPが設定されており、その段階のHPが0になった時点で次の段階に移る、というシステムがどうしても欲しかったのです。大きな格納容器とそこに流し込む液体を保存するポリタンクのようなイメージです。
まあ、東方と一緒ですけど・・・
段階を管理するために int phase
HPを格納する変数として int hptank
段階ごとのHP int[ ] hp
と3つ変数を用意しました。
switch (phase)
これによってHPの管理と段階ごとの攻撃パターンの管理をわけることができました。
switch (phase)
各段階ごとに攻撃パターンを記述すればOKです。このおかげでテキストがずいぶん見やすくなりました。視認性は開発スピードに大きく影響します。
Altseedを使用しています
http://altseed.github.io/
現在のシューティングゲームではボスのHPに応じて攻撃パターンが変化するものがほとんどです。様々な言語のチュートリアルサイトでその実装方法が掲載されています。しかしその全て(私が見た中では)が初期HPに対する割合で変化させるものでした。
初期HPの80%〜100%の間 攻撃パターン1
初期HPの60%〜 80%の間 攻撃パターン2
・・・
・・・
これが基本的な手法ですが、後から攻撃パターンの持続時間を変更したくなった時に全部の数値を替えなければいけません。
なので、各段階ごとにHPが設定されており、その段階のHPが0になった時点で次の段階に移る、というシステムがどうしても欲しかったのです。大きな格納容器とそこに流し込む液体を保存するポリタンクのようなイメージです。
まあ、東方と一緒ですけど・・・
段階を管理するために int phase
HPを格納する変数として int hptank
段階ごとのHP int[ ] hp
と3つ変数を用意しました。
switch (phase)
{
case 1:
if (hp[phase] > 0)
{
hptank = hp[phase];
hp[phase] = 0;
}
else if (hptank <= 0) phase++;
break;
case 2:
if (hp[phase] > 0)
{
hptank = hp[phase];
hp[phase] = 0;
}
else if (hptank <= 0) phase++;
break;
case 3:
if (hp[phase] > 0)
{
hptank = hp[phase];
hp[phase] = 0;
}
else if (hptank <= 0) phase++;
break;
case 4:
if (hp[phase] > 0)
{
hptank = hp[phase];
hp[phase] = 0;
}
else if (hptank <= 0) phase++;
break;
case 5:
Engine.Sound.Play(SE.bossexplosion);
Dispose();
break;
} これによってHPの管理と段階ごとの攻撃パターンの管理をわけることができました。
switch (phase)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
} 各段階ごとに攻撃パターンを記述すればOKです。このおかげでテキストがずいぶん見やすくなりました。視認性は開発スピードに大きく影響します。
Altseedを使用しています
http://altseed.github.io/
コメント