背景を表示することができません。

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

背景を表示することができません。

#1

投稿記事 by jios » 12年前

こんばんは。
いつもお世話になっています、jiosです。
現在、「シューティングゲームの館」というサイトの「4. 基本的な関数を作る。」を参考にしてプログラムを組んでいます。
しかし、キャラクターや背景の画像を表示することができません。
作成したプロジェクトをそのまま書きます。

コード:

#include"DxLib.h"

extern int gpUpdateKey();
extern int CheckStateKey(unsigned char Handle);

int ProcessLoop(){
	if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
    if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
	gpUpdateKey();
	return 0;
}

/* グローバル宣言 */

int    counter=0;
int    color_white;


typedef struct{
        double x,y;
        int status,counter;
        int shot [11][15];
} BODY_player_t;

BODY_player_t Player;


/******************/



void initialization(){
    Player.x=200.0;
    Player.y=400.0;
    Player.counter=0;
    Player.status=0;
}

void SetColor(){
    color_white = GetColor(255,255,255);       //白色ハンドルを取得
}


void FpsTimeFanction(){
        static int FpsTime[2]={0,},FpsTime_i=0;
        static double Fps=0.0;

        if(FpsTime_i== 0)
                FpsTime[0]=GetNowCount();                           //1周目の時間取得
        if(FpsTime_i==49){
                FpsTime[1]=GetNowCount();                           //50周目の時間取得
                Fps = 1000.0f / ((FpsTime[1] - FpsTime[0]) / 50.0f);//測定した値からfpsを計算
                FpsTime_i=0;
        }
        else
                FpsTime_i++;                                          //現在何周目かカウント
        if(Fps != 0)
                DrawFormatString(565,460,color_white,"FPS %.1f",Fps); //fpsを表示
        return;
}


int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

		//画像ファイルハンドル
		int Handle1 = LoadGraph("画像/background0.png");
		int Handle2 = LoadGraph("画像/background1.png");
		int img_player[4];
		int player = LoadDivGraph( "Sh/弾幕/img/char/player.png" , 4 , 4 , 1 , 32 , 48 , img_player ) ;


		int RefreshTime = 0;
        initialization();                                 //初期化
        SetColor();  

		// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの更新)
        while(ProcessMessage() == 0 && ProcessLoop() == 0){
			 RefreshTime = GetNowCount();


			 DrawGraph(0,0,Handle1,FALSE);

			 DrawGraph((int)Player.x,(int)Player.y,img_player[0],TRUE);

			 DrawGraph(220,480,Handle2,TRUE);


			 FpsTimeFanction();
			 counter++;

			 ScreenFlip();

			if(CheckStateKey(KEY_INPUT_ESCAPE) == 1) break;
	}


	DxLib_End(); // DXライブラリ終了処理
	return 0;
}
間違っている部分などが有りましたら、ご指摘お願いします。

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

Re: 背景を表示することができません。

#2

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

画像は指定したパスに存在しますか?
Log.txtにエラーは出ていませんか?
画像は透明ではありませんか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 背景を表示することができません。

#3

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

こちらの環境で関数のハリボテを作り、指定されたフォルダに仮画像を置いてテストしたところ、
background0.pngとplayer.pngは表示されました。
background1.pngは画面外のため見えません。

Windows Vista Home Premium SP2 32ビット
Intel(R) Core(TM)2 Duo T8100 @2.10GHz 2.10GHz
RAM 4.00GB
gcc 4.7.2
DXライブラリ Ver3.10a

ハリボテのコード

コード:

int gpUpdateKey() {
	return 0;
}

int CheckStateKey(unsigned char Handle) {
	return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 背景を表示することができません。

#4

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

コンパイルとリンクによる実行ファイルの作成と、作成したファイルの実行はできていますか?
コンパイルやリンクに成功しない場合→エラーメッセージを教えてください。
作成したファイルの実行ができない場合→ウイルス対策ソフトが邪魔をしていることがあります。もしくはメモリ不足とか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#5

投稿記事 by jios » 12年前

返信遅くなってすいません。
まだ背景を表示することができません。

コンパイルしたときは成功と出るのですが実行すると画像が出ません。

画像が透明か透明でないかどうやってみわければいいですか?

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

Re: 背景を表示することができません。

#6

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

みけCAT さんが書きました:画像は指定したパスに存在しますか?
Log.txtにエラーは出ていませんか?
この質問に答えてください。
jios さんが書きました:画像が透明か透明でないかどうやってみわければいいですか?
画像をGIMPで開いてみてください。
透明なら(デフォルト設定では)市松模様が表示されるはずです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#7

投稿記事 by jios » 12年前

Log.txtには一通り見ましたがエラーは無かったです。
画像には指定されたパスは無かったです。
CIMPで調べた結果、画像は透明では無かったです。

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

Re: 背景を表示することができません。

#8

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

jios さんが書きました:画像には指定されたパスは無かったです。
画像にパスが記録されているかは問題ではありません。
指定したパスに画像があるかどうかです。

FPSの表示は画面に出ていますか?
画像は真っ黒ではないですか?
画像が小さすぎて、見落としているということはないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#9

投稿記事 by jios » 12年前

パスはサイトのとおりやったので、おそらくあっていると思います。
FPSは画面に出ています。
画面は真っ黒です。

コード:

SetGraphMode(700,800,16);
で、画面のサイズを変更し他のですが表示されませんでした。

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

Re: 背景を表示することができません。

#10

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

コード:

ErrorLogFmtAdd("画像フォルダがあるべき場所: %s\n",GetCurrentDirectory());
というコードをDxLib_Init()のあと、whileループの前に書くことで、
Log.txtに画像フォルダがあるべき場所(カレントディレクトリ)が出力されます。
background0.pngが入っている「画像」フォルダが、出力されたディレクトリにあるかを確認してください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 背景を表示することができません。

#11

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

他のDXライブラリを使用したプログラム、例えば四聖龍神録Plusは正常に動作しますか?

環境は通常の実機Windowsですか?それとも特殊な環境(仮想マシンやwineなど)ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#12

投稿記事 by jios » 12年前

すみません、コードのカレントディレクトリの2つ目がわかりません。一応「NULL」といれたら
プログラムが強制終了されてしまいました。

コード:

ErrorLogFmtAdd("画像フォルダがあるべき場所: %s\n",GetCurrentDirectory(Handle1,NULL));
四聖龍神録Plusを一番最初にやっていたのですがそこで画像が表示できませんでした。
なので前の「シューティングゲームの館」を参考に現在プログラムを組んでい他のですが、画像や背景を表示することはできませんでした。
同じような「新・ゲームプログラミングの館」の「17. 画像を分割して読み込む」はキャラクターを動かせたりできました。

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

Re: 背景を表示することができません。

#13

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

すいません、間違えたようですね。
この関数を使ってください。

コード:

void printCurDirToLog(void) {
	char buf[40000]={0};
	GetCurrentDirectory(sizeof(buf),buf);
	ErrorLogFmtAdd("画像フォルダがあるべき場所: %s\n",buf);
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 背景を表示することができません。

#14

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

画像の中身がわからないので、見えない/見えにくい画像なのではないかと疑っています。
次の手順でテストしてみてください。
1.今のプログラムのexeファイルを適当な新しいディレクトリにコピーする
2.添付のzipファイルの中身(Shフォルダと画像フォルダ)をexeファイルと同じディレクトリに解凍して置く
3.exeファイルをエクスプローラから起動する
添付ファイル
haikei_hyouzi_dekinai.zip
テスト用仮画像
(6.93 KiB) ダウンロード数: 121 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#15

投稿記事 by jios » 12年前

無理でした。

ほかの方法を試そうと重いこんな関数を使って試したんですが、画像は表示されませんでした。

コード:

DrawModiGraph(
			0,0,	//左上
			4000,0,
			400,300,
			0,300,
			Handle1,TRUE
			);
持っているほかの画像で試したところ今表示できない画像以外は表示することができました。

夜遅くまですいません。

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

Re: 背景を表示することができません。

#16

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

jios さんが書きました:無理でした。
何が無理だったのですか?詳しく教えてください。
提示した関数によるテストですか?それともzipで渡した画像を使ったテストですか?
jios さんが書きました:持っているほかの画像で試したところ今表示できない画像以外は表示することができました。
画像が壊れている可能性が考えられます。
他のソフト(ペイント、Firefox、libpngを使った自作プログラム、Internet Explorerなど)では読み込んで表示できますか?
表示できない画像をアップロードすることはできますか?(著作権に気をつけてください)
http://www.axfc.net/uploader/
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: 背景を表示することができません。

#17

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

質問を無視しないてください。
みけCAT さんが書きました:他のDXライブラリを使用したプログラム、例えば四聖龍神録Plusは正常に動作しますか?

環境は通常の実機Windowsですか?それとも特殊な環境(仮想マシンやwineなど)ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#18

投稿記事 by jios » 12年前

返信遅れてすみませんでした。

提示していただいた関数のテストとzip画像を使ったテストができませんでした。
提示していただいた関数のテストを使って持っているほかの画像ででテストしたところその画像は表示することができました。

ペイントやGIMPなどで画像を読み込むことはできました。

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

Re: 背景を表示することができません。

#19

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

どうして2種類のテストができなかったのですか?
システムの制約やエラーですか?
それともやり方がわかりませんでしたか?
「できません」とは、どのような状態を表していますか?

実行環境は秘密なのでしょうか?
著作権やセキュリティなどの関係で、問題の画像のアップロードは不可能と考えていいですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#20

投稿記事 by jios » 12年前

2種類のテストは制約やエラーは出ませんでした。
ただやはり、画面にはFpsしか表示されませんでした。

実行環境はWindows7です。
画像は著作権のためにアップロードはできませんでした。

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

Re: 背景を表示することができません。

#21

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

jios さんが書きました:2種類のテストは制約やエラーは出ませんでした。
ただやはり、画面にはFpsしか表示されませんでした。
出力されたLog.txtの内容を貼ってもらうことはできますか?
(ユーザー名などの個人情報を晒さないように、適宜編集してください)
DXライブラリのバージョンはいくつですか?
画像が本当にpng(もしくは他のDXライブラリが対応している形式)かどうか、WinExchangeで確認してみてください。
オフトピック
自分の用意した画像も表示できないのはやっかいですね…
jios さんが書きました:実行環境はWindows7です。
画像は著作権のためにアップロードはできませんでした。
わかりました。ありがとうございます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#22

投稿記事 by jios » 12年前

すみません。

家に帰ってパソコンを変えて一度試したところ表示することができました。

今まで使ってたノートパソコンは、先ほど書いたwindows7です。

家のパソコンはデスク型で、ノートパソコンと同じwindows7です。

これに何か違いがあるのですか?

使ったコードは全く同じです。

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

Re: 背景を表示することができません。

#23

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

32ビットと64ビットの違い、グラフィックカードとの相性、マルチディスプレイでの不都合、
インストールされているDXライブラリのバージョンの違いなどが考えられます。

もすとしょっとなど、他のDXライブラリを使ったプログラムでは画像が表示されるかを確かめてみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

jios

Re: 背景を表示することができません。

#24

投稿記事 by jios » 12年前

ノートパソコンのほうでは表示できませんでしたが、デスクのほうでは表示することができました。

みけCATさん長くなってしまいましたが、今まで丁寧な説明ありがとうございました。

閉鎖

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