画像が表示できない

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

画像が表示できない

#1

投稿記事 by DEBUGONN » 1年前

LoadGraphScreen関数を使用した際に、「エスケープ シーケンスとして正しく認識されませんでした。というエラーメッセージが表示されます。
入力したパスは「"C:\Users\wildn\OneDrive\画像\ゲーム制作用\背景 川.jpg"」です。

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

Re: 画像が表示できない

#2

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

生文字列リテラルではない文字列リテラル中の \ はC++ではエスケープシーケンスとして解釈されるので、
\ を表すエスケープシーケンスの \\ を用いて

コード:

"C:\\Users\\wildn\\OneDrive\\画像\\ゲーム制作用\\背景 川.jpg"
とするといいかもしれません。

コンパイラが対応していれば、生文字列リテラルを用いて

コード:

R"(C:\Users\wildn\OneDrive\画像\ゲーム制作用\背景 川.jpg)"
とも表現できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

DEBUGONN

だめでした

#3

投稿記事 by DEBUGONN » 1年前

//でも\ダメでした・・・

色々と説明が足りなかったので補足します。
https://dixq.net/g/01_04.html(新・ゲームプログラミングの館)を参考に書きました。パスの形が元のものと全然違うし、エラーを吐かずに実行できたけど画像が出力されなかったのでパスの書き方に問題があるのではと考えています。

画像ファイルは
.vs
pacages
x64
ゲーム用BGM
ゲーム用画像
Log.txt
pacages.config
夏休み製作.cpp
夏休み製作.sin
夏休み製作.vcxproj
夏休み製作.vcxproj.filters
夏休み製作.vcxproj.user
のゲーム用画像に格納してあります。

書いたプログラムは以下です。

コード:

"#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	ChangeWindowMode(TRUE);			//ウィンドウモードに設定
	DxLib_Init();					//DXライブラリ初期化処理
	SetDrawScreen(DX_SCREEN_BACK);  //裏画面処理

	char keys[256]; 

//画像の表示
	int haikei;						//画像をメモリにロードする
	haikei = LoadGraph("C:Users\wildn\OneDrive\ドキュメント\DXライブラリ\KFIP\個人製作ゲーム\夏休み製作\ゲーム用画像\背景 川.jpg");
	DrawGraph(320, 240, haikei, TRUE);
	WaitKey();

/*BGMの設定
	int bgm;
	bgm = LoadSoundMem("魔王魂  ピアノ25.ogg");
	PlaySoundMem(bgm, DX_PLAYTYPE_LOOP);*/


//構造体の作成
	typedef struct{					//Ball型の作成
		int x;		//x座標
		int y;		//y座標
		int r;		//半径
		int color;	//色
	}Ball;

	//Ball型の変数ball
	Ball ball = { 320,240,10,GetColor(255,255,255) };

//キーの動作
	while (1) {
		if (ProcessMessage() != 0) break;
		ClearDrawScreen();				//画面に書かれたものを削除する
		GetHitKeyStateAll(keys);        //キーの入力を待つ

		//円の描写
		DrawCircle(ball.x, ball.y, ball.r, ball.color, 1);

		//キーの動作
		if (keys[KEY_INPUT_W]) {
			if (ball.y > 0) {
				ball.y = ball.y - 10;
			}
		}
		if (keys[KEY_INPUT_A]) {
			if (ball.x > 0) {
				ball.x = ball.x - 10;
			}
		}
		if (keys[KEY_INPUT_S]) {
			if (ball.y < 480) {
				ball.y = ball.y + 10;
			}
		}
		if (keys[KEY_INPUT_D]) {
			if (ball.x < 640) {
				ball.x = ball.x + 10;
			}
		}

		ScreenFlip();					//裏画面を表画面に表示
		if (CheckHitKey(KEY_INPUT_ESCAPE) == 1) {	//escキーで終了
			break;
		}
	}

	WaitKey();			//任意のキー入力を待つ
	DxLib_End();		//DXライブラリ終了処理
	return 0;
}

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

Re: だめでした

#4

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

DEBUGONN さんが書きました:
1年前
パスの書き方に問題があるのではと考えています。
ではなぜ元のサイトと同じ書き方

コード:

"ゲーム用画像/背景 川.jpg"
を使わないのですか?
それとも、使ったけどうまく動かなかったですか?
DEBUGONN さんが書きました:
1年前

コード:

	haikei = LoadGraph("C:Users\wildn\OneDrive\ドキュメント\DXライブラリ\KFIP\個人製作ゲーム\夏休み製作\ゲーム用画像\背景 川.jpg");
エスケープシーケンスの関係で不適切な表記であるのに加え、C:の後にパスの区切り文字が抜けていますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

DEBUGONN

#5

投稿記事 by DEBUGONN » 1年前

元のサイトと同じ書き方はもちろん、すべての区切りを一個ずつ減らしてみましたがダメでした。エラーは出ませんが画像は表示されません。C:の後に区切り文字を入れてみましたがそれもダメでした。
エスケープシーケンスというのがわからないのですが、

コード:

haikei = LoadGraph("C:\\Users\\wildn\\OneDrive\\ドキュメント\\DXライブラリ\\KFIP\\個人製作ゲーム\\夏休み製作\\ゲーム用画像\\背景 川.jpg");

コード:

haikei = LoadGraph("C:/Users/wildn/OneDrive/ドキュメント/DXライブラリ/KFIP/個人製作ゲーム/夏休み製作/ゲーム用画像/背景 川.jpg");
の書き方では画像は表示されませんでした。

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

Re: 画像が表示できない

#6

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

画像が表示されないのは、表示に反映される場所で画像を描画する処理を実行していないからであると考えられます。

コード:

ClearDrawScreen();				//画面に書かれたものを削除する
より下、かつ

コード:

ScreenFlip();					//裏画面を表画面に表示
より上の部分に、画像を描画する処理

コード:

DrawGraph(320, 240, haikei, TRUE);
を入れてみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

DEBUGONN

Re: 画像が表示できない

#7

投稿記事 by DEBUGONN » 1年前

コード:

ScreenFlip()
を使用したところ画像が描画されました!!ありがとうございます!!
初歩的すぎるミスでしたね・・・すみません;;

返信

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