ページ 11

14歳シリーズ

Posted: 2009年1月21日(水) 10:53
by akihito
今のゲームでは自キャラが一回やられるとすぐにゲームオーバーになってしまう。
自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。
DrawGameMain関数の修正で対応可能。ちょっとずるで自キャラのamodeをA_HARDに、lifeを3に修正するという方法もとれます。その場合はAtariHantei関数を修正する。

どちらの方法もわかりません(泣)

Re:14歳シリーズ

Posted: 2009年1月21日(水) 11:05
by Mist
> 自キャラの数を記憶するグローバル変数を用意し、3機までやられてもOKなように変更する。

この方法については前回の質問でMikanさんが答えてくれてますよ。

Re:14歳シリーズ

Posted: 2009年1月21日(水) 11:52
by akihito
さらに詳しくおしえてもらえるとうれしいです。
衝突した際やゲームオーバーの処理がまだ理解できません。

Re:14歳シリーズ

Posted: 2009年1月21日(水) 13:29
by Dixq (管理人)
jikidata.life = 3;

としてあるので、グローバル変数用意する必要ないんじゃないですか?
あたった瞬間これ減らして、ライフが0になったらゲームオーバーフラグを立てるみたいな感じでいいんじゃないでしょうか?
ゲームオーバーについての処理がよくわかりませんが、

.gameover

みたいな変数用意して、そのフラグがオンになってたら
操作や弾計算関数などの関数を呼ばず、「ゲームオーバー」みたいに表示すればいいと思います。

Re:14歳シリーズ

Posted: 2009年1月22日(木) 00:05
by Mikan
うーんと、掲示されているソースファイルだけだと

全体が見えないので詳しい説明ができません。

ゲームの状態別に処理をしているソースファイルや、

ゲームオーバーの処理をしているソースファイルを掲示されますと

もう少し詳しく説明することができます。

Re:14歳シリーズ

Posted: 2009年1月26日(月) 11:55
by akihito
お願いします。

Re:14歳シリーズ

Posted: 2009年1月26日(月) 12:23
by BEMANI
>>akihitoさん
ゲーム本体の実行という場所で、

if(AtariHantei() == 1 || MapAtari() == 1) {
 gstate = GAME_OVER;

と書かれていました。
で、AtariHantei()を見させて頂いたところ、IsAtari()が呼ばれており、
その中で、当たったら retval = 1 として、retvalを戻り値としています。
そして、retval が 1 であれば AtariHantei() の中で return(1) として戻り値を返しています。


ですので、if(AtariHantei() == 1 || MapAtari() == 1) の部分で、
一度当たると AtariHantei の戻り値が 1 となりますので、結果、
gstate = GAME_OVER となり、ゲームーオーバーになってしまうんだと思います。



「自機のライフが0になったらゲームオーバー」とするには、
retval = 1; の描く場所を変えればいいような気がします。

今のままですと、当たったら100% retval = 1 となり、ゲームオーバーになります。
ですので、retval = 1 を a->life = 0; と b->life = 0; の次の行に書けばいいんだと思います。

そうしてあげれば、ライフが0になった時だけゲームオーバーになるはずです。

ざっと見ただけなので、間違ってたら非常に申し訳ないのです;;

Re:14歳シリーズ

Posted: 2009年1月27日(火) 12:18
by akihito
>>BEMANIさん
このやり方でもだめみたいでした(泣)

Re:14歳シリーズ

Posted: 2009年1月27日(火) 13:34
by Mikan
>このやり方でもだめみたいでした(泣)

うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
MapAtari()が必ず1を返してきているとかでしょうか?

上記if文の下で

if( jikidata.life <= 0 ){
//ゲームオーバーの処理
}
と変更してみてはいかがでしょうか?

Re:14歳シリーズ

Posted: 2009年1月27日(火) 16:23
by BEMANI
>>akihitoさん
すいません、内容を誤解していたみたいです;
上に書いたコードですと「ライフは残っているが、敵弾に当たった」
場合、retval に 1 が入らないですね;
申し訳ないです;
ですので、上のコードはスルーして頂いて、
Mikanさんが書かれている「jikidata.life が 0 の時にゲームオーバー処理」へ
というのが良さそうです;


>>Mikanさん
>うーん、やっぱりif(AtariHantei() == 1 || MapAtari() == 1) で
>MapAtari()が必ず1を返してきているとかでしょうか?
  ライフが0の時に1を返すように変えたので、おそらく、MapAtari()で 1 が返ってきてるっぽいです。
  

>if( jikidata.life <= 0 ){
>//ゲームオーバーの処理
>}
  これがいいかもしれませんね><
  

Re:14歳シリーズ

Posted: 2009年1月29日(木) 13:46
by akihito
BEMANIさんMikanさん!!
おかげさまで完成させることができました。
本当に感謝です。
ありがとうございます。