良くわからないエラーが発生しました。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
samusu0905
記事: 336
登録日時: 10年前

良くわからないエラーが発生しました。

#1

投稿記事 by samusu0905 » 9年前

私が普段利用している学内ライブラリで2Dゲームを制作していますが、
学内ライブラリにはキャラクターにモーションを行わせる処理がないので、
DXライブラリを追加利用してキャラクターにモーションを行わせようとしたのですが、
良く分からないエラーが発生して解決できない状態です。
因みに、エラーはDXライブラリの画像分割読み込みの関数を使うと発生しました。
エラーを提示します。

エラー 2 error C2664: 'DxLib::LoadDivGraph' : 1 番目の引数を 'const char [19]' から 'const TCHAR *' に変換できません。(新しい機能 ; ヘルプを参照) c:\users\k013a1879\desktop\制作ゲーム(c,c++,c#)\christmas gift\data.cpp 123 1 Christmas gift


3 IntelliSense: 型 "const char *" の引数は型 "const TCHAR *" のパラメーターと互換性がありません c:\users\k013a1879\desktop\制作ゲーム(c,c++,c#)\christmas gift\data.cpp 123 16 Christmas gift

解決策はありませんか?

アバター
Tatu
記事: 445
登録日時: 13年前
住所: 北海道

Re: 良くわからないエラーが発生しました。

#2

投稿記事 by Tatu » 9年前

DXライブラリ置き場の「DXライブラリの使い方」というページを見てください。

samusu0905
記事: 336
登録日時: 10年前

Re: 良くわからないエラーが発生しました。

#3

投稿記事 by samusu0905 » 9年前

>>Tatuさん回答有難うございます。
了解です。一度確認してみます。

samusu0905
記事: 336
登録日時: 10年前

Re: 良くわからないエラーが発生しました。

#4

投稿記事 by samusu0905 » 9年前

問題だったエラーは解決したのですが、今度は画像が表示されません。
DXライブラリ特有の形でソースコードを書いたのですが、うまく表示されませんでした。
一応コードの提示だけしておきます。

コード:

//メイン--------------------------------------------------------------------
void DataStart(void)
{
	//タイマーが80より小さいなら
	if( Timer < 80)
	{
		//画像ロード
		//ロード

		//ロード文字
		gsLoadTexture( &sLoadtext, "grp/loadtext.bmp", 0xff000000 );
		//ロード中のサンタ
		gsLoadTexture( &sLoadsanta, "grp/loadsanta.bmp", 0xff000000 );


		//タイトル

		//タイトル背景
		gsLoadTexture( &sTitle, "grp/title.bmp", 0 );
		//タイトル文字
		gsLoadTexture( &sTitletext, "grp/titletext.bmp", 0xff000000 );
		//タイトル文字2
		gsLoadTexture( &sTitletext2, "grp/titletext2.bmp", 0xff000000 );
		//スタート文字
		gsLoadTexture( &sStarttext, "grp/starttext.bmp", 0xff000000 );
		//カーソル
		gsLoadTexture( &sCursor, "grp/cursor.bmp", 0xff000000 );
		//飾り
		gsLoadTexture( &sKazari, "grp/kazari.bmp", 0xff000000 );
		//サンタ
		gsLoadTexture( &sSanta, "grp/santa.bmp", 0xff000000 );
		//プレゼントボックス
		gsLoadTexture( &sPresentbox, "grp/presentbox.bmp", 0xff000000 );


		//操作方法
		//操作方法背景
		gsLoadTexture( &sOperation, "grp/operation.bmp", 0);
		//操作方法文字
		gsLoadTexture( &sOperationtext, "grp/operationtext.bmp", 0xff000000 );


		//ゲームプレイ
		//ステージ1背景
		gsLoadTexture( &sStage1, "grp/stage1.bmp",0xff000000);
		//プレゼント
		//gsLoadTexture( &sPresent, "grp/present.bmp", 0xff000000);
		//雪
		//gsLoadTexture( &sYuki, "grp/yuki.bmp", 0xff000000 );


		//サウンドロード
		//タイトルBGM

		//タイトル
		gsLoadSound( &sTitleBGM, "sound/title.wav");
		//決定SE
		gsLoadSound( &sPushSE, "sound/push.wav");


		//ゲームプレイBGM
		//ステージ
		gsLoadSound( &sStageBGM, "sound/play.wav");



		//ゲームオーバーBGM



		//ゲームクリアBGM
	}

	//DXタイマーが80より小さいなら
	if( DxTimer < 80)
	{
		LoadDivGraph("grp/santaclaus.bmp", 12, 3, 4, 60, 66, s_nowNumber);
	}

	// while(画面の描画, メッセージ, 描画した画像を消す, キー入力の更新, ESCキーを押下, )
		while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen())
		{
			if(SceneMode == 3)
			{
				SantaDraw();
			}
		}
}
上の読み込みは別のライブラリを利用しての読み込みですので、気にしなくても結構です。
ちゃんとwhie文でコードを書いたんですけども、何かいけない点ってありますか?
因みにSantaDraw();関数は別のクラスから呼び出しております。
呼び出し元は下記のクラスのコードからです。

コード:

//サンタクラス

//表示-----------------------------------------------------------------
void SantaDraw(void)
{
	DrawGraph( 20, 20, s_nowNumber[3], TRUE);
	//DrawGraph( SantaClaus.sx, SantaClaus.sy, gs[s_nowNumber], TRUE);
}
どうしたら表示できますでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 良くわからないエラーが発生しました。

#5

投稿記事 by みけCAT » 9年前

以下の点を確認して下さい。
・DataStart()を呼び出す時にScemeModeの値は3になっていますか?
 もしくはScemeMode == 3を評価した時に真になるデータになっていますか?
・DataStart()を呼び出す時にDxTimerの値は80未満になっていますか?
 もしくはDxTimer < 80を評価した時に真になるデータになっていますか?
・DataStart()は呼び出されていますか?
・DataStart()を呼び出す前にDxLib_Init()を1回呼び出していますか?
・画像ファイルは適切な位置にありますか?
・DataStart()から見えているs_nowNumberとSantaDraw()から見えているs_nowNumberは同じ変数(領域)ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

samusu0905
記事: 336
登録日時: 10年前

Re: 良くわからないエラーが発生しました。

#6

投稿記事 by samusu0905 » 9年前

>>みけCATさん
すみません。少しコードを訂正しました。
直したわけではありません。ただの訂正です。

コード:

//メイン--------------------------------------------------------------------
void DataStart(void)
{
	//タイマーが80未満なら
	if( Timer < 80)
	{
		//画像ロード
		//ロード

		//ロード文字
		gsLoadTexture( &sLoadtext, "grp/loadtext.bmp", 0xff000000 );
		//ロード中のサンタ
		gsLoadTexture( &sLoadsanta, "grp/loadsanta.bmp", 0xff000000 );


		//タイトル

		//タイトル背景
		gsLoadTexture( &sTitle, "grp/title.bmp", 0 );
		//タイトル文字
		gsLoadTexture( &sTitletext, "grp/titletext.bmp", 0xff000000 );
		//タイトル文字2
		gsLoadTexture( &sTitletext2, "grp/titletext2.bmp", 0xff000000 );
		//スタート文字
		gsLoadTexture( &sStarttext, "grp/starttext.bmp", 0xff000000 );
		//カーソル
		gsLoadTexture( &sCursor, "grp/cursor.bmp", 0xff000000 );
		//飾り
		gsLoadTexture( &sKazari, "grp/kazari.bmp", 0xff000000 );
		//サンタ
		gsLoadTexture( &sSanta, "grp/santa.bmp", 0xff000000 );
		//プレゼントボックス
		gsLoadTexture( &sPresentbox, "grp/presentbox.bmp", 0xff000000 );


		//操作方法
		//操作方法背景
		gsLoadTexture( &sOperation, "grp/operation.bmp", 0);
		//操作方法文字
		gsLoadTexture( &sOperationtext, "grp/operationtext.bmp", 0xff000000 );


		//ゲームプレイ
		//ステージ1背景
		gsLoadTexture( &sStage1, "grp/stage1.bmp",0xff000000);
		//プレゼント
		//gsLoadTexture( &sPresent, "grp/present.bmp", 0xff000000);
		//雪
		//gsLoadTexture( &sYuki, "grp/yuki.bmp", 0xff000000 );

		//DXタイマーが80未満なら
		if( DxTimer < 80 )
		{
			LoadDivGraph("grp/santaclaus.bmp", 12, 3, 4, 60, 66, s_nowNumber);
		}


		//サウンドロード
		//タイトルBGM

		//タイトル
		gsLoadSound( &sTitleBGM, "sound/title.wav");
		//決定SE
		gsLoadSound( &sPushSE, "sound/push.wav");


		//ゲームプレイBGM
		//ステージ
		gsLoadSound( &sStageBGM, "sound/play.wav");



		//ゲームオーバーBGM



		//ゲームクリアBGM
	}
}

コード:

//表示-----------------------------------------------------------------
void SantaDraw(void)
{
	DrawGraph( SantaClaus.sx, SantaClaus.sy, s_nowNumber[3], TRUE);
	//DrawGraph( SantaClaus.sx, SantaClaus.sy, gs[s_nowNumber], TRUE);
}

追加で別のソースファイルにDXライブラリ特有の形を作りました。

コード:

//メイン------------------------------------------------------------------------
void DxDataMain(void)
{
	// while(画面の描画, メッセージ, 描画した画像を消す, キー入力の更新, ESCキーを押下, )
	while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen())
	{
		if(SceneMode == 3)
		{
			SantaDraw();
		}
	}
}

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 良くわからないエラーが発生しました。

#7

投稿記事 by みけCAT » 9年前

関数を作るだけでなく、適切に呼び出していますか?
各関数を呼び出している部分(WinMain関数など)のコードを見せていただけますか?

(メインループ中にSceneModeを変える処理が入っていないのが気になりますが…DXライブラリはマルチスレッド非推奨だった気がしますし…)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 良くわからないエラーが発生しました。

#8

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

みけCAT さん。
学内ライブラリとDXライブラリを混ぜれるか先にテストしたほうが良いと思うですが。私はできないと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

samusu0905
記事: 336
登録日時: 10年前

Re: 良くわからないエラーが発生しました。

#9

投稿記事 by samusu0905 » 9年前

>>みけCATさん
わかりました。
コードをお見せします。
何か間違いがあれば指摘をお願いします。

コード:

//開始--------------------------
void GameStart(void)
{
	Timer = 0;		//タイマー初期化

	//各シーンモードの開始処理を呼ぶ
	switch(SceneMode)
	{
		//ロード
	case MODE_LOAD:
		LoadStart();		//ロード開始
		DataStart();		//データ開始
		DxDataStart();			//DXライブラリ専用開始
		break;


		//タイトル
	case MODE_TITLE:
		TitleStart();		//開始
		break;

		//ステージ
	case MODE_STAGE:
		StageStart();		//開始
		break;


		//ゲームオーバー
	case MODE_GAMEOVER:
		GameOverStart();	//開始
		break;


		//ゲームクリア
	case MODE_GAMECLEAR:
		GameClearStart();	//開始
		break;


		//リザルト
	case MODE_RESULT:
		ResultStart();		//開始
		break;
	}
}

コード:

//メインループ------------------
void GameLoop(void)
{
	int old;		//変数oldの宣言

	old = SceneMode;		//oldにシーンモードを代入

	//モードがロード中なら
	if( SceneMode == 0 )
	{
		Timer++;		//タイマー加算
		LoadTimer++;	//ロードタイマー加算
		DxTimer++;
	}
	else
	{
		Timer += 0;		//タイマー初期化
		LoadTimer += 0;	//ロードタイマー初期化
	}

	//各シーンモードの呼び出し
	switch(SceneMode)
	{
		//ロード
	case MODE_LOAD:
		LoadMain();				//ロードメイン
		LoadDraw();				//ロード表示
		break;


		//タイトル
	case MODE_TITLE:
		TitleMain();			//メイン
		TitleDraw();			//表示
		break;


		//操作方法
	case MODE_OPERATION:
		OperationMain();		//メイン
		OperationDraw();		//表示
		break;

		//ステージ
	case MODE_STAGE:
		StageMain();			//メイン
		StageDraw();			//表示
		DxDataMain();			//DXライブラリ専用メイン
		break;

		//ゲームオーバー
	case MODE_GAMEOVER:
		StageDraw();			//ステージ表示
		GameOverMain();			//ゲームオーバーメイン
		GameOverDraw();			//ゲームオーバー表示
		break;

		//ゲームクリア
	case MODE_GAMECLEAR:
		StageDraw();			//ステージ表示
		GameClearMain();		//ゲームクリアメイン
		GameClearDraw();		//ゲームクリア表示
		break;

		//リザルト
	case MODE_RESULT:
		StageDraw();			//ステージ表示
		ResultMain();			//リザルトメイン
		ResultDraw();			//リザルト表示
		break;
	}

	//シーンモードが今のシーンと違っていれば
	if(SceneMode != old)
	{
		GameStart();			//ゲーム開始
	}
}

下記のコードはDXライブラリの関数を使うときに利用するための関数です。(LoadDivGraph()関数など)

コード:

//開始--------------------------------------------------------------------------
void DxDataStart(void)
{
	

	SetGraphMode( 1026, 688, 24);
	SetDrawScreen( DX_SCREEN_BACK );

	//DXタイマーが80未満なら
	if( DxTimer < 80 )
	{
		LoadDivGraph("grp/santaclaus.bmp", 12, 3, 4, 60, 66, s_nowNumber);
	}
	
}


//メイン------------------------------------------------------------------------
int DxDataMain(void)
{
	if(ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1)
	{ return -1; }
	// while(画面の描画, メッセージ, 描画した画像を消す, キー入力の更新, ESCキーを押下, )
	while( !ScreenFlip() && !ProcessMessage() && !ClearDrawScreen() && 
		!Key[KEY_INPUT_ESCAPE] && !GetHitKeyStateAll(Key))
	{
		if(SceneMode == 3)
		{
			SantaDraw();
		}
	}

	DxLib_End();
	return 0;
}
また、
学内ライブラリとDXライブラリを交互に使いわけたいのですが。
プログラムを実行すると、両方のライブラリ専用のゲーム画面が表示されてしまうので、ここを一つの画面に統一したいのですが。
そもそも、ライブラリって複数利用可能ですか?

NNN

Re: 良くわからないエラーが発生しました。

#10

投稿記事 by NNN » 9年前

学内ライブラリの仕様が分からないと複数利用可能かは他人からは判別不可能です。

画像が出ない件はみけCATさんのNo.5の件を調査したらいいと思います。

閉鎖

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