ページ 11

文字がすぐに消えてしまいます

Posted: 2012年5月21日(月) 15:48
by yui
初めてこちらに投稿するyuiと申します。
C++で弾幕シューティングゲームを作りたいと思っています。
DXライブラリやC++は全くの初心者です。一応C言語は一通り習得しました。
今ゲームの骨組みを作成中で、まずタイトル画面を表示させようとしたのですが「PUSH Z KEY」という文字が一瞬表示されすぐに消えてしまいます。
これは何がいけなかったのでしょうか?
よろしくお願いします。

gameframe.h

コード:

#include	"DxLib.h"

class GameFrame{
	virtual void drawGameTitle();
public:
	virtual ~GameFrame(){}
	void doMainLoop(int);
};
gameframe.cpp

コード:

#include	"gameframe.h"

void GameFrame::doMainLoop(int scmode){
	ChangeWindowMode(scmode);
	if(DxLib_Init() == -1) return;
	SetDrawScreen(DX_SCREEN_BACK);
	
	
	while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
		ClsDrawScreen();
		drawGameTitle();
		ScreenFlip();
	}
	DxLib_End();
}

void GameFrame::drawGameTitle(){
	int smallfont = CreateFontToHandle(0,32,9,DX_FONTTYPE_NORMAL);
	int col = GetColor(255,0,255);
	int w = GetDrawStringWidthToHandle("PUSH Z KEY",12,smallfont);
	DrawStringToHandle(320-w/2,300,"PUSH Z KEY",col,smallfont);	
}
main.cpp

コード:

#include	"gameframe.h"

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hp, LPSTR lpC, int nC){
	GameFrame *gf = new GameFrame();
	gf -> doMainLoop(TRUE);
	delete gf;
}

Re: 文字がすぐに消えてしまいます

Posted: 2012年5月21日(月) 15:54
by h2so5
CreateFontToHandle を毎フレーム呼び出しているからです。

Re: 文字がすぐに消えてしまいます

Posted: 2012年5月21日(月) 17:08
by softya(ソフト屋)
せっかくクラスを使うなら、コンストラクタ・デストラクタを使って欲しいなと思ったりします。
あと意味があってvirtual って書いてますか?いや、基底クラスを作るならvirtualなデストラクタは良いんですけどね。
privateなvirtual void drawGameTitle();関数はどういう意図なんでしょうか?

ついでに参考。
「FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ」
http://d.hatena.ne.jp/kasei_san/20080516/p1


C++でシューティングに関しては
「龍神録プログラミングの館」
http://dixq.net/rp/
下の方にC++版があるので参考にしてみたらどうでしょうか?

Re: 文字がすぐに消えてしまいます

Posted: 2012年5月21日(月) 23:36
by yui
h2so5さん
初歩的なミスでした…ありがとうございます!

softya(ソフト屋)さん
デストラクタやvirtualの理解がまだ曖昧でした・・・。
リンク先のページを参考にさせて頂きます。
ありがとうございました!