昔、どなたかが
▼以下のロードのサンプルを作った▼
#include "Lib/DxLib.h"
//毎回しないといけない処理
int LoopProcess(){
if(ScreenFlip())//裏画面反映
return -1;
if(ProcessMessage())//メッセージ処理
return -1;
if(ClearDrawScreen())//画面クリア
return -1;
if(CheckHitKey(KEY_INPUT_ESCAPE))//ESCキーが押されていると終了
return -1;
return 0;
}
//読み込み個数(GraphLoadが呼ばれる回数)
#define NUM 120
//何回呼ばれたかカウントする変数
int LoadNum;
//ロード状態を描画
void GraphLoad(){
DrawFormatString(300,400,GetColor(0,255,255),"%d%",LoadNum*100/NUM);
DrawBox( 20, 440, 20+600* NUM/NUM, 460, GetColor(0,255,255), FALSE );//枠描画
DrawBox( 20, 440, 20+600*LoadNum/NUM, 460, GetColor(0,255,255), TRUE );//中身描画
LoadNum++;
}
//データのロードと描画関数の呼び出し
int MyLoadGraph(char *st){
GraphLoad();
return LoadGraph( st );
}
//データのロード
void Load( int GraphHandle[NUM] ){
int i;
for(i=0;i<NUM;i++){
LoopProcess();
GraphHandle = MyLoadGraph("Image.png");
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
int n=0;
int GraphHandle[NUM];//画像ハンドル
if( ChangeWindowMode(TRUE) || DxLib_Init() || SetDrawScreen( DX_SCREEN_BACK ) ) return -1;
Load( GraphHandle );//データのロード
while( !LoopProcess() ){
//通常ここに処理を追加
}
DxLib_End();
return 0;
}
これを利用して龍神録にロード画面を表示させる方法を実装してみたいのですが、
画像ハンドルが例えば
img_board[10] = LoadGraph("../dat/img/board/10.png");
img_board[11] = LoadGraph("../dat/img/board/11.png");
img_board[12] = LoadGraph("../dat/img/board/12.png");
img_etc[1] = LoadGraph( "../dat/img/enemy/hp.png" );
img_etc[2] = LoadGraph( "../dat/img/enemy/bossback.png" );
img_etc[5] = LoadGraph( "../dat/img/enemy/bossback3.png" );
LoadDivGraph( "../dat/img/bullet/b0.png" , 5 , 5 , 1 , 76 , 76 , img_bullet[0] ) ;
LoadDivGraph( "../dat/img/bullet/b1.png" , 6 , 6 , 1 , 22 , 22 , img_bullet[1] ) ;
LoadDivGraph( "../dat/img/bullet/b2.png" , 10 , 10 , 1 , 5 , 120 , img_bullet[2] ) ;
sound_se[0]=LoadSoundMem("../dat/se/enemy_shot.wav");
sound_se[1]=LoadSoundMem("../dat/se/enemy_death.wav");
sound_se[2]=LoadSoundMem("../dat/se/cshot.wav");
color[0] = GetColor(255,255,255);//白
color[1] = GetColor( 0, 0, 0);//黒
color[2] = GetColor(255, 0, 0);//赤
みたいにバラバラで、どうもロードの仕方が分かりません。
どうしたら上手くいくか分かる方がいましたら教えてください。
よろしくお願いします。
龍神録にロード画面を実装する方法
Re:龍神録にロード画面を実装する方法
継承を使ってみてはどうでしょう?
#include <iostream> class Image { public: Image(); }; Image::Image() { } class Sound { public: Sound(); }; Sound::Sound() { } class Data { public: virtual void Load( char *filename, Image *image ) = 0; virtual void Load( char *filename, Sound *sound ) = 0; }; class DataLoad : public Data { public: void Load( char *filename, Image *image ); void Load( char *filename, Sound *sound ); }; void DataLoad::Load( char *filename, Image *image ) { // ロード処理 // image = Load( filename ); printf( "Image Loaded.\n" ); } void DataLoad::Load( char *filename, Sound *sound ) { // ロード処理 //sound = Load( filename ); printf( "Sound Loaded.\n" ); } int main() { DataLoad *manager = new DataLoad(); Image image; Sound sound; manager->Load( "test.jpg", &image ); manager->Load( "test.wav", &sound ); delete manager; return 0; }
Re:龍神録にロード画面を実装する方法
自分で自分にレスするのもなんですが
Load( char *filename, Image *image );
Load( char *filename, Sound *sound );
とありますが、これってテンプレート化できたらやったほうがいい気がしてきた
Load( char *filename, Image *image );
Load( char *filename, Sound *sound );
とありますが、これってテンプレート化できたらやったほうがいい気がしてきた
Re:龍神録にロード画面を実装する方法
>とありますが、これってテンプレート化できたらやったほうがいい気がしてきた
テンプレート化してみました。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
class Image
{
public:
bool run();
};
bool Image::run() {std::cout <<"image"<<std::endl; return true;}
class Sound
{
public:
bool run();
};
bool Sound::run(){std::cout << "sound" <<std::endl; return true;}
class base
{
base* thisPtr;
public:
virtual bool run()=0;
};
template<typename T>
class Data: public base
{
private:
T t;
public:
bool run(){return t.run();}
bool load(char*filename);
// コンストラクタ
Data(char*filename){std::cout << "open " << filename << std::endl; }
Data(){thisPrt=this;}
};
struct f : public std::unary_function<base*,bool>
{
bool operator()(base *b)
{
return b->run();
}
};
int main()
{
Data<Image> dataImage("image");
Data<Sound> dataSound("sound");
std::vector<base*> vec;
vec.push_back(&dataImage);
vec.push_back(&dataSound);
std::for_each(vec.begin(),vec.end(),f());
return 0;
}
テンプレート化してみました。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>
class Image
{
public:
bool run();
};
bool Image::run() {std::cout <<"image"<<std::endl; return true;}
class Sound
{
public:
bool run();
};
bool Sound::run(){std::cout << "sound" <<std::endl; return true;}
class base
{
base* thisPtr;
public:
virtual bool run()=0;
};
template<typename T>
class Data: public base
{
private:
T t;
public:
bool run(){return t.run();}
bool load(char*filename);
// コンストラクタ
Data(char*filename){std::cout << "open " << filename << std::endl; }
Data(){thisPrt=this;}
};
struct f : public std::unary_function<base*,bool>
{
bool operator()(base *b)
{
return b->run();
}
};
int main()
{
Data<Image> dataImage("image");
Data<Sound> dataSound("sound");
std::vector<base*> vec;
vec.push_back(&dataImage);
vec.push_back(&dataSound);
std::for_each(vec.begin(),vec.end(),f());
return 0;
}
Re:龍神録にロード画面を実装する方法
すべての変数をポインタ化して、そのポインタとファイル名を構造体にする。
それを配列にすれば、サンプルの方法でできます。
例
struct pointer_file{
int* soundHand;
std::string fileName;
}
pointer_file graphInitList[100] = {
{&graph_enemy[0],"fweagweag.jpg"},
{&graph_anime[1],"fwgeawg.jpg"},
}
もうひとつの方法は、グラフハンドルはすべてひとつの配列にしてしまう。
区別の仕方はインデックスにする値を#define することで、わかりやすくなる。
例
graphs[100];
#define G_BULLET1 (0)
graphs[G_BULLET1] = LoadGraph(...
*注意:テンプレートがどうのこうのってところはまったく読んでないです。
*追記注意
LoadDivGraph は、このようにはいかないので、もうひと工夫が必要です。
最初の質問と最初の過去のサンプルをみて答えました。
それを配列にすれば、サンプルの方法でできます。
例
struct pointer_file{
int* soundHand;
std::string fileName;
}
pointer_file graphInitList[100] = {
{&graph_enemy[0],"fweagweag.jpg"},
{&graph_anime[1],"fwgeawg.jpg"},
}
もうひとつの方法は、グラフハンドルはすべてひとつの配列にしてしまう。
区別の仕方はインデックスにする値を#define することで、わかりやすくなる。
例
graphs[100];
#define G_BULLET1 (0)
graphs[G_BULLET1] = LoadGraph(...
*注意:テンプレートがどうのこうのってところはまったく読んでないです。
*追記注意
LoadDivGraph は、このようにはいかないので、もうひと工夫が必要です。
最初の質問と最初の過去のサンプルをみて答えました。

Re:龍神録にロード画面を実装する方法
む?
miyazaさんは
バラバラで、どうもロードの仕方が分かりません。
どうしたら上手くいくか分かる方がいましたら教えてください。
とおっしゃってたので
統一した形式でロード処理のソースを書きたいのかなと思い
継承を使った場合をサンプルで書いてみました
継承がわからないのか、関数のオーバーロードがわからないのか
関数の組み方がわからないのか、どうやっていいのかまったくわからないのか
どこらへんでつまづいてます?
Maさんのサンプルもありますので、私だけのやりかたにこだわらなくていいですけど
miyazaさんは
バラバラで、どうもロードの仕方が分かりません。
どうしたら上手くいくか分かる方がいましたら教えてください。
とおっしゃってたので
統一した形式でロード処理のソースを書きたいのかなと思い
継承を使った場合をサンプルで書いてみました
継承がわからないのか、関数のオーバーロードがわからないのか
関数の組み方がわからないのか、どうやっていいのかまったくわからないのか
どこらへんでつまづいてます?
Maさんのサンプルもありますので、私だけのやりかたにこだわらなくていいですけど