ページ 11

スコア

Posted: 2008年2月10日(日) 04:05
by L
はじめまして、Lと申します。
今、大学の勉強でC言語でシューティングゲームを作っているのですが、20日にそのゲームを提出しなければいけないのです。

今、製作中なのですが、スコア表示について教えていただきたいです。
スコア表示は文字だけでしたいので、画像は必要ないです。

下記のソースを見てください。

void Score( int x, int y, int color )
{

DrawFormatString( x, y, color ,"Score 0000000", Score );
ScreenFlip();

}

   ・
   ・
   ・

// ループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )
{

// 画面を初期化する
ClearDrawScreen() ;

//スコア表示
Score( 267 , 15 , 0xFFFFFFFF ) ;
   ・
   ・
   ・
となっています。
しかし、この方法だと本来 滑らかに動作するはずが とても重くなりました。

ソースのもっと下の方に"弾が敵に触れると敵破壊"というコードがあり、そこに破壊のついでにスコア加算コードを入れたいのです。
そうすれば、破壊した時にスコアが加算されるので、普通のシューティングと変わりありません。

ですが、その画面にスコア表示させなければいけませんので、上のコードをやってみたのですが重すぎて・・・。
それとも、コード自体 複雑すぎますか? もっと簡単にできる方法はありますか?


他にもいろいろ聞きたいことがあるのですが、スコア表示を先に教えていただきたいので
どうぞ、よろしくお願い致します。

使用:Visual C++ 2005 Express Editiom

Re:スコア

Posted: 2008年2月10日(日) 04:43
by GPGA
ScreenFlip関数は無限ループの一番最後に一度だけ呼び出す関数ですが
これを何度も呼んでいませんか?

Re:スコア

Posted: 2008年2月10日(日) 16:12
by L
返答ありがとうございます。
この関数は無限ループだったんですか・・・。

もっと、簡単なスコア表示ができる方法はありませんか?

よろしくお願いします。

Re:スコア

Posted: 2008年2月10日(日) 19:27
by 管理人
時間が今ないので、あまり詳しくいえませんが・・
関数が無限ループなんじゃなくて、終了処理をするまで

while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 )

ここで無限ループしていますよね。このループの一番最後にだけ書くものです。

Re:スコア

Posted: 2008年2月11日(月) 07:09
by L
ループのところに関数を入れていたのですね・・・(汗


今すぐは言いませんが、簡単な記述があるのならばよろしくお願いします。
できれば、提出期間20日前、18日や19日までにはお願いします。

Re:スコア

Posted: 2008年2月11日(月) 18:11
by GPGA
void Score( int x, int y, int color ) 
{ 
    DrawFormatString( x, y, color ,"Score 0000000", Score ); 

    // ここに書いてはいけない
    //ScreenFlip();
}


// ループ
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) 
{ 
    // 画面を初期化する 
    ClearDrawScreen() ; 

    //スコア表示 
    Score( 267 , 15 , 0xFFFFFFFF ) ; 

    // 各描画処理
    ・・・

    // ループ内の描画処理の最後にScreenFlip関数を呼ぶ
    // ココ以外でScreenFlip関数を呼ぶべきではない
    ScreenFlip();

    // フレームレートを一定にする処理
    ・・・
}

Re:スコア

Posted: 2008年2月11日(月) 20:44
by L
よく、分かりません。
できれば、修正していただけませんか?

初心ですが、よろしくお願いします。