上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DxLibのモデル操作はハンドルを使って行うんだけど

int handle = MV1LoadModel("aaa.x");
MV1DrawModel(handle);
MV1DeleteModel(handle);

int型はあかんやろ

handle = 12345;//こんなん出来たらあかんやろ

というわけで

class Handle
{
public:
Handle() : h(-1){} //ハンドルの初期値は-1にする
operator int() const { return h; } //dxlibの関数で使いやすくするため
void Set(int n){h=n;}
int Get(){return h;}
private:
void operator = (const Handle& src);//代入禁止
int h;
};

こんなん作った、Setterで明示的に操作することで
「意図せずにハンドルの値を書き換えていた」ということは無くなる

Handle handle;
handle.Set(MV1LoadModel("aaa.x"));
MV1DrawModel(handle);
MV1DeleteModel(handle);

operator=をprivateにしているので代入しようとするとコンパイルエラーにできる
handle = 12345;//エラー
operator intを実装しているのでhandle.Get()としなくて良い

もう1つ問題点

handle = MV1LoadModel("aaa.x");
handle = MV1LoadModel("aaa.x");
handle = MV1LoadModel("aaa.x");
MV1DeleteModel(handle);

こんな事をするとメモリが爆発するので
適当な関数を作ってハンドルを引数として渡して
ハンドルの値をチェックするようにした

bool Hoge(ss::Handle* pHandle, const char* szPath)
{
//ハンドルがモデルを持っていたら解放を試みる
if(*pHandle == -1)
{
MV1DeleteModel(*pHandle);
}

//読込、ハンドル設定
pHandle->Set(MV1LoadModel(szPath));

//成否
if(*pHandle == -1)
return false;
return true;
}

こんな感じ

Handle handle;
Hoge(&handle, "aaa.x");
スポンサーサイト
namespace ss{

class CResourceMgr : public CSingleton
{
friend CSingleton;
private:
CResourceMgr(){}
~CResourceMgr(){Destroy();}
public:


int Add(const char* szLocalPath)
{
if(!szLocalPath)
return -1;

//拡張子抽出
std::string ext = szLocalPath;
int dot = ext.find_last_of(".");
if(-1 == dot)
return -1;
ext = ext.substr(dot+1, ext.length());

CObjBase* p = NULL;
int handle = -1;

//モデル
//読み込むことのできるモデルファイル形式は x, mqo, mv1, pmd( + vmd ), pmx( + vmd ) の4種類です。
//( 但し、pmx は pmd 相当の機能だけを使用していた場合のみ正常に読み込める仮対応状態です )
if((ext=="x") || (ext=="mqo") || (ext=="mv1") || (ext=="pmd") || (ext=="pmx"))
{
p = new CModel();
handle = p->Load(szLocalPath);
}
//画像
//読み込むことの出来る画像形式は BMP,JPEG,PNG,DDS,ARGB,TGA の6種類です。
else if((ext=="bmp") || (ext=="jpg") || (ext=="png") || (ext=="dds") || (ext=="argb") || (ext=="tga"))
{
}
////エフェクト
//else if()
//{}


//失敗
if(-1 == handle)
{
SafeDelete(p);
}
//成功
else
{
m_ListAllObj.push_back(p);
p->SetPath(szLocalPath);
}

return handle;
}

(⌒,_ゝ⌒)なんやこれ

テンプレートでモデル用、画像用、・・・と量産しようと思ったらシングルトンと共生できないし
ンン~~~~~~~

class CModelRscMgr : public CRscMgrBase, public CSingleton
{
friend CSingleton;
//型だけ変えたコード
};
class CSpriteRscMgr : public CRscMgrBase, public CSingleton
{
friend CSingleton;
//型だけ変えたコード
};

こうするか?
ンン~~~~~~~
2012年
シャッチョ「よそに勤めに行ってるつもりで働らかなあかんで~」
ワイ「はい」
2014年
シャッチョ「そんな勤め人みたいな事を言うなら辞めろ!!!」
ワイ「はい」
(備考:自営)

//----------------------------------------------------------------------
クリスタル完成写真
台座に電池入れたらLEDで光るらしいけど電池無かった。こんど買ってこよ
20140106153306.jpg



//----------------------------------------------------------------------
日報
dx20140106.jpg
DxLibはじめました
とりあえずデバッグ機能から実装
printfみたいな感覚で使える文字描画
グリッド描画
キーボード キーが押されたか 放されたか 連打されたか
マウス 1フレームで移動したカーソルの座標を取得
カメラ 視線方向取得 平行移動 ズーム

を作った

明日はカメラの旋回から
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。