私が普段利用している学内ライブラリで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
解決策はありませんか?
良くわからないエラーが発生しました。
Re: 良くわからないエラーが発生しました。
DXライブラリ置き場の「DXライブラリの使い方」というページを見てください。
-
- 記事: 336
- 登録日時: 10年前
Re: 良くわからないエラーが発生しました。
問題だったエラーは解決したのですが、今度は画像が表示されません。
DXライブラリ特有の形でソースコードを書いたのですが、うまく表示されませんでした。
一応コードの提示だけしておきます。
上の読み込みは別のライブラリを利用しての読み込みですので、気にしなくても結構です。
ちゃんとwhie文でコードを書いたんですけども、何かいけない点ってありますか?
因みにSantaDraw();関数は別のクラスから呼び出しております。
呼び出し元は下記のクラスのコードからです。
どうしたら表示できますでしょうか?
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();関数は別のクラスから呼び出しております。
呼び出し元は下記のクラスのコードからです。
どうしたら表示できますでしょうか?
Re: 良くわからないエラーが発生しました。
以下の点を確認して下さい。
・DataStart()を呼び出す時にScemeModeの値は3になっていますか?
もしくはScemeMode == 3を評価した時に真になるデータになっていますか?
・DataStart()を呼び出す時にDxTimerの値は80未満になっていますか?
もしくはDxTimer < 80を評価した時に真になるデータになっていますか?
・DataStart()は呼び出されていますか?
・DataStart()を呼び出す前にDxLib_Init()を1回呼び出していますか?
・画像ファイルは適切な位置にありますか?
・DataStart()から見えているs_nowNumberとSantaDraw()から見えているs_nowNumberは同じ変数(領域)ですか?
・DataStart()を呼び出す時にScemeModeの値は3になっていますか?
もしくはScemeMode == 3を評価した時に真になるデータになっていますか?
・DataStart()を呼び出す時にDxTimerの値は80未満になっていますか?
もしくはDxTimer < 80を評価した時に真になるデータになっていますか?
・DataStart()は呼び出されていますか?
・DataStart()を呼び出す前にDxLib_Init()を1回呼び出していますか?
・画像ファイルは適切な位置にありますか?
・DataStart()から見えているs_nowNumberとSantaDraw()から見えているs_nowNumberは同じ変数(領域)ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
- 記事: 336
- 登録日時: 10年前
Re: 良くわからないエラーが発生しました。
>>みけCATさん
すみません。少しコードを訂正しました。
直したわけではありません。ただの訂正です。
追加で別のソースファイルに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 );
//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ライブラリ特有の形を作りました。
Re: 良くわからないエラーが発生しました。
関数を作るだけでなく、適切に呼び出していますか?
各関数を呼び出している部分(WinMain関数など)のコードを見せていただけますか?
(メインループ中にSceneModeを変える処理が入っていないのが気になりますが…DXライブラリはマルチスレッド非推奨だった気がしますし…)
各関数を呼び出している部分(WinMain関数など)のコードを見せていただけますか?
(メインループ中にSceneModeを変える処理が入っていないのが気になりますが…DXライブラリはマルチスレッド非推奨だった気がしますし…)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 良くわからないエラーが発生しました。
みけCAT さん。
学内ライブラリとDXライブラリを混ぜれるか先にテストしたほうが良いと思うですが。私はできないと思います。
学内ライブラリとDXライブラリを混ぜれるか先にテストしたほうが良いと思うですが。私はできないと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
- 記事: 336
- 登録日時: 10年前
Re: 良くわからないエラーが発生しました。
>>みけCATさん
わかりました。
コードをお見せします。
何か間違いがあれば指摘をお願いします。
下記のコードはDXライブラリの関数を使うときに利用するための関数です。(LoadDivGraph()関数など)
また、
学内ライブラリとDXライブラリを交互に使いわけたいのですが。
プログラムを実行すると、両方のライブラリ専用のゲーム画面が表示されてしまうので、ここを一つの画面に統一したいのですが。
そもそも、ライブラリって複数利用可能ですか?
わかりました。
コードをお見せします。
何か間違いがあれば指摘をお願いします。
//開始--------------------------
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ライブラリを交互に使いわけたいのですが。
プログラムを実行すると、両方のライブラリ専用のゲーム画面が表示されてしまうので、ここを一つの画面に統一したいのですが。
そもそも、ライブラリって複数利用可能ですか?
Re: 良くわからないエラーが発生しました。
学内ライブラリの仕様が分からないと複数利用可能かは他人からは判別不可能です。
画像が出ない件はみけCATさんのNo.5の件を調査したらいいと思います。
画像が出ない件はみけCATさんのNo.5の件を調査したらいいと思います。