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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あるびの

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

#1

投稿記事 by あるびの » 14年前

初めまして

現在、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 ;
}
このように一度関数を介して、ロードするとうまくいきません。

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#2

投稿記事 by softya(ソフト屋) » 14年前

そんな適当な動作はするはずないので、まず実行時出力されるLog.txtを確認してロードの状況を確認してください。
後最短に縮めたテストコードで実験してみてください。
それで上手く行ったら、それ以外のコード部分に問題があります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 14年前

支障なく動くサンプル。
問題があるとしたら、省略された部分にあると思います。

コード:

#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;
}  
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る