ページ 11

Releseでは表示されるがDebugでは表示されない

Posted: 2014年3月16日(日) 19:35
by kar
初めての投稿ですがよろしくお願いします。
開発環境はOS : Windouws 7 (64bit)//使用言語 : C++ //コンパイラ: Visual C++2008 EE です。


今私はC++の勉強とシューティングゲーム作りの勉強をする為に簡単なゲームを作っていたのですが、困っている事があります。
この間、自機の画像を表示するためのプログラムを書いていたのですが、コンパイルして実行しても画像が表示されない事がありました。そこでコンパイルをDebugからReleseに変更した所、画像を表示する事が出来ました。
なぜこのような現象が起こってしまうのか調べたのですが、あまり理解する事が出来ませんでした。

DebugとReleseの両方で問題なく画像を表示するにはどうしたらいいのでしょうか?
稚拙な文章で申し訳ありませんが、どなたかアドバイスをいただけないでしょうか。

関係があるのか分かりませんが画像を表示する部分のソースコードです。

コード:

#include "DxLib.h"
#include "player.h"
#include "define.h"
#include <math.h>

PLAYER::PLAYER() 
{ 
	 gh=LoadGraph("画像/自機/001.png");
 
     speed=3.0; //スピード

	 //初期位置
     x=180; 
	 y=400; 
	 //移動制御
	 sayu=zyoge=0;
	 naname=1.0;

     life=true;// 生きてるかどうか
} 

void PLAYER::Move(){
	sayu=zyoge=0;
	naname=1.0;
	//左右どちらかの入力があったら
	if(key[KEY_INPUT_RIGHT]==1 || key[KEY_INPUT_LEFT]==1){
		sayu=1;
	}
	//上下どちらかの入力があったら
	if(key[KEY_INPUT_UP]==1 || key[KEY_INPUT_DOWN]==1){
		zyoge=1;
	}
	//左右、上下どちらも押されていたら
	if(sayu == 1 && zyoge == 1){
		naname=sqrt(2.0);
	}
	
	//キャラの移動
	if(key[KEY_INPUT_RIGHT]==1){
		x+=cos(angle)*speed/naname;
	}
	if(key[KEY_INPUT_LEFT]==1){
		x-=cos(angle)*speed/naname;
	}
	if(key[KEY_INPUT_UP]==1){
		y-=cos(angle)*speed/naname;
	}
	if(key[KEY_INPUT_DOWN]==1){
		y+=cos(angle)*speed/naname;
	}

}

void PLAYER::Draw(){
	if(life){
		DrawRotaGraph(x,y,1.0,angle,gh,TRUE);
	}
}

void PLAYER::All(){
	Move();
	Draw();
}

Re: Releseでは表示されるがDebugでは表示されない

Posted: 2014年3月16日(日) 19:56
by みけCAT
コンストラクタで画像をロードしようとした場合、
コードの書き方が悪くDxLib_Initを呼ぶ前にコンストラクタが呼ばれてしまうとロード失敗になります。
ただし、これだけのコードでこれが原因かはわかりません。

Re: Releseでは表示されるがDebugでは表示されない

Posted: 2014年3月16日(日) 21:19
by kar
返信していただきありがとうございます。しばらく返信していただいた内容で考えていたのですが、解決する事が出来ませんでした。
勉強不足で申し訳ありませんが、以下のコードはその内容にあてはまりますでしょうか?
main.cppです

コード:

#include "DxLib.h"
#include "control.h"

char key[256];

bool Process(){
	if(ScreenFlip() != 0)return false;
	if(ProcessMessage() != 0)return false;
	if(ClearDrawScreen() != 0)return false;
	if(GetHitKeyStateAll(key) != 0)return false;
	return true;
}
	
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE);
	DxLib_Init();
	SetDrawScreen(DX_SCREEN_BACK);
	CONTROL* control = new CONTROL;
 
	while(Process()){

		control->All();

	}
	
	
	DxLib_End();

	return 0;
}
control.hです

コード:

#ifndef DEF_CONTROL
#define DEF_CONTROL
#include"player.h"

class CONTROL{
private:
	PLAYER* player;
public:
	CONTROL();
	~CONTROL();
	void All();
};

#endif
先ほど投稿したのはplayer.cppです。
control.cppではCONTROLクラスのコンストラクタでPLAYERクラスのインスタンスplayerを生成しています。
CONTROLクラスのAll関数内ではPLAYERクラスのAll関数を実行するという仕組みにしています。
全体の構成はこちらのサイトを参考にしていますhttp://bituse.info/game/shot/2
見づらくてすいません。

Re: Releseでは表示されるがDebugでは表示されない

Posted: 2014年3月16日(日) 21:35
by みけCAT
多分当てはまらないと思います。(規格書を読んだり実験をしたりはしていないので、間違っているかもしれません)
問題の切り分けのために、画像を絶対パスで指定してみるといいかもしれません。

Re: Releseでは表示されるがDebugでは表示されない

Posted: 2014年3月16日(日) 22:04
by kar
う~む・・、絶対パス(初めてこの用語を知りました)で指定してもやはりDebugだけで表示出来ませんでした。

コード:

 gh=LoadGraph("F:\\弾幕ゲーム(未完成)\\Sample\\GameProg\\画像\\自機\\001.png");
自分の勉強不足かもしれません。もっと勉強してから出直したいと思います。
返信していただきありがとうございました。大変勉強になりました。