ページ 11

Dxライブラリの画像・3Dモデルロード系関数の挙動

Posted: 2011年10月27日(木) 16:28
by あるびの
初めまして

現在、C言語+Dxライブラリで3DのFPSを作っているのですが
LoadGraphやMV1LoadGraph関数の仕様がわからず困っています。
関数の呼び出し位置によって結果が変わるのです。

コード:

int Graph;

void MainFunction( void )
{
	~~省略~~

	Graph = LoadGraph( "example.bmp" );

	while( ----- )
	{
		ClearDrawScreen();

		DrawGraph( x, y, Graph, FALSE );

		ScreenFlip();
	}

	~~省略~~
}
上の場合だといかなくて

コード:

int Graph;

void MainFunction( void )
{
	~~省略~~

	while( ----- )
	{
		ClearDrawScreen();

                Graph = LoadGraph( "example.bmp" );

		DrawGraph( x, y, Graph, FALSE );

		ScreenFlip();
	}

	~~省略~~
}

/*一度上のプログラムを実行してから下を実行*/

int Graph;

void MainFunction( void )
{
	~~省略~~

	Graph = LoadGraph( "example.bmp" );

	while( ----- )
	{
		ClearDrawScreen();

		DrawGraph( x, y, Graph, FALSE );

		ScreenFlip();
	}

	~~省略~~
}
このようにやるとうまくいきます。(なぜなのかまったく不明)
また

コード:

int Graph;

void Load( void );

void MainFunction( void )
{
	~~省略~~

	while( ----- )
	{
		ClearDrawScreen();

		DrawGraph( x, y, Graph, FALSE );

		ScreenFlip();
	}

	~~省略~~
}

void Load( void )
{
	Graph = LoadGraph( "example.bmp" );
	return ;
}
このように一度関数を介して、ロードするとうまくいきません。

調べてみてもまったく書いてなくて、
もしかしたら、~~省略~~と書いた部分に問題があったり、環境に問題があったりするかも
しれないと思っていたところです。

ただ、関数の仕様だったとしたらしょうがないので、お答えをお願いします><

Re: Dxライブラリの画像・3Dモデルロード系関数の挙動

Posted: 2011年10月27日(木) 16:55
by softya(ソフト屋)
そんな適当な動作はするはずないので、まず実行時出力されるLog.txtを確認してロードの状況を確認してください。
後最短に縮めたテストコードで実験してみてください。
それで上手く行ったら、それ以外のコード部分に問題があります。

Re: Dxライブラリの画像・3Dモデルロード系関数の挙動

Posted: 2011年10月27日(木) 17:04
by softya(ソフト屋)
支障なく動くサンプル。
問題があるとしたら、省略された部分にあると思います。

コード:

#include "DxLib.h"

int Graph;

void Load( void )
{
	Graph = LoadGraph( "char.png" );
	return ;
}

void MainFunction( void )
{
	int x = 0;

	while( ProcessMessage()==0 ){
		ClearDrawScreen();
		DrawGraph( x, 100, Graph, TRUE ); //画像の描画
		x = x + 2; // xを2増やす
		ScreenFlip();
	}
}

int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
	ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
	Load();
	MainFunction();
	DxLib_End(); // DXライブラリ終了処理
	return 0;
}