サンプルプログラムが実行できません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
エルフ
記事: 79
登録日時: 9年前
住所: 埼玉

サンプルプログラムが実行できません

#1

投稿記事 by エルフ » 9年前

サンプルプログラムが実行できません
そのまま打ったつもりなんですが・・
見直してもわかりません。
どこが間違ってますか?
DXライブラリです。

コード:

#include <DxLib.h>

//グローバル変数
//時間計算用変数
int g_lasttime = 0;     //直前の計測時間
float g_frametime = 0;  //1ループにかかった時間


int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC)
{
	//ウィンドウモードにする
	ChangeWindowMode(TRUE);
	//DX ライブラリ初期化
	if (DxLib_Init() == -1) return -1;

	//画像を読み込み
	int ghandle = LoadGraph("media/smp1_chara01.png");
	float x = 0, y = 0;

	SetDrawScreen(DX_SCREEN_BACK);
	g_lasttime = GetNowCount();  //現在時刻の記憶
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
	{
		//1ループにかかった時間を計測
		int curtime = GetNowCount();
		g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
		g_lasttime = curtime;

		ClearDrawScreen();
		//自キャラ移動
		int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
		float mv = 80,0f * g_frametime; //移動量計算
		if (key & PAD_INPUT_UP)      y -= mv;
		if (key & PAD_INPUT_DOWN)    y += mv;
		if (key & PAD_INPUT_LEFT)    x -= mv;
		if (key & PAD_INPUT_RIGHT)   x += mv;
		DrawGraph(x, y, ghandle, TRUE);
		clsDx();
		printfDx("%d : %f : %f", g_lasttime, g_frametime, mv);
		ScreenFlip();
	}

	//待機
	WaitKey();
	//DXライブラリの終了処理
	DxLib_End();
	return 0;
}

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

Re: サンプルプログラムが実行できません

#2

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

32行目のカンマは、ピリオドの打ち間違いではないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
エルフ
記事: 79
登録日時: 9年前
住所: 埼玉

Re: サンプルプログラムが実行できません

#3

投稿記事 by エルフ » 9年前

みけCATさん
わかりませんでした・・・
ありがとうございます
ですが警告がでるのですが・・
warning C4244: '引数' : 'float' から 'int' への変換です。データが失われる可能性があります。

どうしたら解決できますか?

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

Re: サンプルプログラムが実行できません

#4

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

DrawGraph関数の代わりにDrawGraphF関数を使えばいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
エルフ
記事: 79
登録日時: 9年前
住所: 埼玉

Re: サンプルプログラムが実行できません

#5

投稿記事 by エルフ » 9年前

みけCATさん
DrawGraphFとは書かれてないので、本が悪いのかな・・?
ありがとうございました

コード:

#include <DxLib.h>

//グローバル変数
//時間計算用変数
int g_lasttime = 0;     //直前の計測時間
float g_frametime = 0;  //1ループにかかった時間


int WINAPI WinMain(HINSTANCE h1, HINSTANCE hP, LPSTR lpC, int nC)
{
	//ウィンドウモードにする
	ChangeWindowMode(TRUE);
	//DX ライブラリ初期化
	if (DxLib_Init() == -1) return -1;

	//画像を読み込み
	int ghandle = LoadGraph("media/smp1_chara01.png");
	float x = 0, y = 0;

	SetDrawScreen(DX_SCREEN_BACK);
	g_lasttime = GetNowCount();  //現在時刻の記憶
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
	{
		//1ループにかかった時間を計測
		int curtime = GetNowCount();
		g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
		g_lasttime = curtime;

		ClearDrawScreen();
		//自キャラ移動
		int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
		float mv = 80.0f * g_frametime; //移動量計算
		if (key & PAD_INPUT_UP)      y -= mv;
		if (key & PAD_INPUT_DOWN)    y += mv;
		if (key & PAD_INPUT_LEFT)    x -= mv;
		if (key & PAD_INPUT_RIGHT)   x += mv;
		DrawGraphF(x, y, ghandle, TRUE);
		clsDx();
		printfDx("%d : %f : %f", g_lasttime, g_frametime, mv);
		ScreenFlip();
	}

	//待機
	WaitKey();
	//DXライブラリの終了処理
	DxLib_End();
	return 0;
}

アバター
エルフ
記事: 79
登録日時: 9年前
住所: 埼玉

Re: サンプルプログラムが実行できません

#6

投稿記事 by エルフ » 9年前

解決しました

アバター
Hiragi(GKUTH)
記事: 167
登録日時: 13年前
住所: 大阪府
連絡を取る:

Re: サンプルプログラムが実行できません

#7

投稿記事 by Hiragi(GKUTH) » 9年前

>>warning C4244: '引数' : 'float' から 'int' への変換です。データが失われる可能性があります。

は、float型から強制的にint型に変換(っぽい)するということです。
DrawGraphは描画する座標をintとして受け取るので、int型にしてやらないといけません。
てわけで小数点以下を切り捨てるときに精度が落ちるよ的な警告を発しているのだと思います。
このコードの場合あまり影響ないと思います。特に本が悪いとか言うことではありません。

ちなみにDrawGraphFは隠し関数でリファレンスには載っていません。
小数点を含む座標を渡すと少し補完して綺麗に描画してくれるようです。

ちなみにFが付く関数は描画系関数に関しては大体あります。

DxLib.h の 2400行目あたりから

コード:

extern	int			DrawGraphF(               float xf, float yf,                                                                       int GrHandle, int TransFlag ) ;							// 画像の描画( 座標指定が float 版 )
extern	int			DrawExtendGraphF(         float x1f, float y1f, float x2f, float y2,                                                int GrHandle, int TransFlag ) ;							// 画像の拡大描画( 座標指定が float 版 )
extern	int			DrawRotaGraphF(           float xf, float yf,                       double ExRate,                    double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE  ) ;	// 画像の回転描画( 座標指定が float 版 )
extern	int			DrawRotaGraph2F(          float xf, float yf, float cxf, float cyf, double ExtRate,                   double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE  ) ;	// 画像の回転描画2( 回転中心指定付き )( 座標指定が float 版 )
extern	int			DrawRotaGraph3F(          float xf, float yf, float cxf, float cyf, double ExtRateX, double ExtRateY, double Angle, int GrHandle, int TransFlag, int TurnFlag = FALSE ) ; 	// 画像の回転描画3( 回転中心指定付き+縦横拡大率別指定版 )( 座標指定が float 版 )
extern	int			DrawModiGraphF(           float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4,           int GrHandle, int TransFlag ) ;							// 画像の自由変形描画( 座標指定が float 版 )
extern	int			DrawTurnGraphF(           float xf, float yf,                           
だいがくせい!

閉鎖

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