DXライブラリの画像のロード

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

DXライブラリの画像のロード

#1

投稿記事 by 酒豪 » 5年前

はじめまして プログラミング入門2ヶ月目の初心者です
言語はC++を使っています
DXライブラリにおけるゲームメインループ内での画像のロード方法について教えてほしいのです

ループの中で二度、画像を読み込むのを防ぐために、画像を読み込んだのかどうかをフラグ変数にして保持したいのですが
フラグ変数に初期値であるゼロを代入することができません
コンストラクタを使えば代入できるでしょうが、これを使う手以外はないのでしょうか

よろしければご回答お願いいたします

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: DXライブラリの画像のロード

#2

投稿記事 by プラム » 5年前

ループ内で画像を読み込む必要はないと思います。
whileを実行する前に画像をロードしてしまえばいいのでは?

アバター
プラム
記事: 164
登録日時: 6年前
住所: 東海地方

Re: DXライブラリの画像のロード

#3

投稿記事 by プラム » 5年前

もしどうしてもループ内で画像を読み込まなければいけない状況になった場合は(ふつうならないと思うが)

コード:

if(count==0){
      LoadGraph("テスト.png");
      count=1;
}
というコードを書けば(たとえば)いいと思います。

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

Re: DXライブラリの画像のロード

#4

投稿記事 by Tatu » 5年前

DXライブラリ置き場のリファレンスページより
http://homepage2.nifty.com/natupaji/DxL ... .html#R3N2

読み込みに成功した場合はグラフィックハンドルが、
失敗した場合は-1が
グラフィックハンドルを扱う変数に代入されます。

そのため、読み込んだかどうかはグラフィックハンドルを扱う変数が-1かどうかを調べればよいと思います。

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 9年前
住所: 北海道札幌市
連絡を取る:

Re: DXライブラリの画像のロード

#5

投稿記事 by Dixq (管理人) » 5年前

こういうのはどうですか?
Initialize()関数内の「//画像のロード」部分でロードすればOKです。

コード:

#include "DxLib.h"

enum Status {
	eStatus_Initialize,
	eStatus_Game,
};

Status status;

void Initilize(){
	//画像のロード
	status = eStatus_Game;
}

void Game(){
	//ゲーム処理
}

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

	status = eStatus_Initialize;

	// while(裏画面を表画面に反映, メッセージ処理, 画面クリア, キーの状態更新)
	while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){

		switch(status){
		case eStatus_Initialize:
			Initialize();
			break;
		case eStatus_Game:
			Game();
			break;
		}

	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
} 
また,変数は0初期化しておけば0以外が入っていればロードしたことがわかります。
終了処理をしたときに0を代入しておけばそれで識別できるでしょう。

酒豪

Re: DXライブラリの画像のロード

#6

投稿記事 by 酒豪 » 5年前

説明不足の点がありました 申し訳ありません
私は以前、C言語でゲーム制作をしたことがありますので、今回はC++のクラスを用いて制作したいです

以前、Dixq様のC++版龍神録のソースコードをダウンロードさせてもらったのですが、そのコードではメインループに入る前に
すべてのグラフィックをコンストラクタでロードしていたと思います

また、ハルルン様が提示していただいたやり方で挑もうと思ってもコンストラクタを使わなければ
フラグ変数に初期値のゼロが代入できません

コンストラクタを避けてはC++のプログラミングは成立しないんでしょうか?

hide

Re: DXライブラリの画像のロード

#7

投稿記事 by hide » 5年前

コンストラクタを使わなくても初期化用のメソッドを書いて必ず呼ぶようにすればほぼ同じです。

逆に言うとコンストラクタは初期化用のメソッドの呼び忘れを防止してくれる、
その程度のものという認識でも十分ですよ。

人の手による”やりわすれ”で起こるバグは非常に多いので、
ちゃんと活用すればスムーズな開発につながるはずです。


コンストラクタを避けたいその真意はなんなのでしょうか?

酒豪

Re: DXライブラリの画像のロード

#8

投稿記事 by 酒豪 » 5年前

>>hide様
私がC++初心者だからなのかもしれませんが、コンストラクタは自分の好きな名前がつけられないので
コンストラクタ内でどのような仕事をしているか分かりづらいと思っていました
C言語から勉強し始めた自分からしてみれば戻り値が無いという特徴が馴染みのないものだったので
なんとなく取っ掛かり難かったのかもしれません
しかし、ただフィールドに初期値を代入するだけのものがコンストラクタなのだと取り決めをしておけば
どんな仕事も何も関係ないですね

C言語のときのようにinitializeメソッドを設置しようかと思いましたが普通にコンストラクタにします
ありがとうございました

閉鎖

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