GScriptサンプル(ハイドライドGS)■プレーヤーとモンスターの辺り判定の処理
ようやく解決できたようです。(理解できてきました)
たまに重なってしまって身動きがとれない状態なったり、SAVEしてLOADした時にモンスターと同じ
位置から始まると重なって身動きがとれなくなうなど問題がありました。
プレーヤーとモンスターの辺り判定を接触した瞬間のみ(初回,トリガー)判定してその場合は移動できない(前回の移動位置に戻る)としてそれ以外のヒット時はモンスターとヒットしていても移動できるという実装に変更しました。これなら何らかの原因で重なってしまってもプレーヤーがモンスターから離れれば問題なくなり、複数の問題を一気に解決できます
■セーブ時に画面にいるモンスターの位置を保存すべきか?
まだ、セーブするかどうかは決めていませんが。
セーブ時に画面内にいるモンスターの情報を保存すべきかという問題があるあります。
FC版ハイドライドはセーブした時のプレーヤーの位置が保存されてロードするとその位置から開始できます。モンスターの情報は保存されずにランダムな位置に生成されていました。
例えば地下に重要なアイテムがあり、それを取って地上へ脱出しなければならない場合。
地下入ってアイテムを取って一旦SAVEするとLOADしたらアイテムを持った状態で地下からはじまります。
(A)あと一撃で死ぬ状態でかつモンスターに囲まれていた場合、モンスターの情報を保存すると詰んでしまいます
(B)逆にモンスターの位置を保存しないでランダムな位置に生成するとSAVE,LOADを繰り返して脱出できてしまうという技が使えてしまいます。
ファミコン版のハイドライドの仕様を調べてみると(B)のSAVE,LOADを繰り返すとモンスターの位置はランダムに生成されるのでSAVE,LOADを繰り返して脱出できるでしょう。
ハイドライドGSでは
(C)地下ではSAVEできない仕様にしてみました
問題がなければ、その仕様にしようかと思います。プレーしている時にはあまり意識しない、制作してみて気づく問題ってよくあります。その場合に既存のゲームがどう対応しているかを調べてみると「なるほどなー」と思うような解決手段を使っていることがあります。
P.S(2)
今まで制作したアクションは敵とヒットするとダメージを受けて無敵状態になるためあまり問題になることはありませんでした。ハイドライドは体当たりして戦うのでモンスターに重なるということはゲームの仕様(?)上問題になってしまいます。無敵になって敵と重なっても良い仕様がとてもアクションゲームに向いていると改めて思いました。
これはファミコン以降のアクションゲームではよく使われている仕様だと思います。ゼルダの伝説を研究(?)した時になるほどと関心させられました。プレーしている時にはあまり意識していませんでしたがとても良いアイディアだと改めて感心させられました。よく考えてみると無敵状態というものは不自然です。ですが操作性も良いし実装も楽なので一石二鳥です。無敵状態で敵と重なって移動できるというアイディアを思い付いたのは凄いことのような気がします。今では当たり前ですが、まだそういったゲームがなかったとしたら、どうしても現実から考えて2つの物体が重なるという非現実なことはなかなか思い付かないような気がします。
P..S(3)
プログラムが大きくなってきてfpsも30でなくなってきていました。
こんなものかと思っていたのですが..debugでビルドしていたのをreleaseでビルドしたら
60fpsでました。debugとreleaseで大分速度が違うようですね