我寫過乙個2d遊戲。寫2d遊戲時大部分的精力花在gui的撰寫和寫指令碼的介面上了。之前寫gui的時候,new乙個button的時候就load乙個texture,如果頻繁切換gui,texture就會頻繁地load和release。
所以把紋理的載入管理與gui寫在一塊是很浪費效率的。最好的方法是紋理的載入與釋放與gui無關。
感謝飯中淹教會了我這個思路:給紋理設定乙個重要度,初始值1,當有gui使用到這個紋理的時候,每幀都增加這個紋理的重要度,當沒有任何程式使用這個紋理的時候,每幀減少紋理的重要度,當重要度減少到0以下,就釋放這個紋理。
這樣做的好處是,經常呼叫的紋理在記憶體中的時間比較長,這樣程式呼叫紋理時很容易命中。而且可以讓多個gui呼叫同乙個紋理。
以下是**。我用hge的,所以呼叫紋理的函式是hge的函式。(*^__^*) 嘻嘻……
儲存紋理用的是陣列,但是用雜湊表會更好。(*^__^*) 嘻嘻……
使用方法:
先呼叫init()初始化
然後要用紋理的時候:
htexture = kresourcesystem::instance().gettexture("aaa.bmp");
釋放紋理的時候:
kresourcesystem::instance().throwtexture("aaa.bmp");
每幀便忘了在主迴圈函式裡呼叫
kresourcesystem::instance().upadate();
#pragma once
#include "hge.h"
#include "singleton.h"
#define maxresourcenum 200
struct sresourcelist
};class kresourcesystem:public pattern::singleton
~kresourcesystem();
void init(hge* hge)
htexture gettexture(const
char* filename);//從列表中返回乙個紋理
void throwtexture(const
char* filename);//通知有乙個紋理在某處不用了
void throwtexture(htexture tex);
void update();//邏輯更新
protected:
private:
sresourcelist m_list[maxresourcenum];
htexture createtexture(const
char* filename);//新建乙個紋理
void releasetexture(int index);//釋放紋理
int getindex(const
char* filename);//返回紋理在陣列中的位置
hge* hge;};
#include "resourcesystem.h"
#include "iostream"
using
namespace std;
int kresourcesystem::getindex(const
char *filename)}}
return -1;
}htexture kresourcesystem::gettexture(const
char *filename)
else
return null;
}void kresourcesystem::throwtexture(const
char* filename)
else}}
void kresourcesystem::releasetexture(int index)
delete m_list[index].filename;
m_list[index].filename = null;
m_list[index].irendered = 0;
m_list[index].importance = 0;
}htexture kresourcesystem::createtexture(const
char* filename)
}return null;
}void kresourcesystem::update()
}else
if(m_list[i].irendered > 0 && m_list[i].filename != null)}}
void kresourcesystem::throwtexture(htexture tex)}}
kresourcesystem::~kresourcesystem()
}*/}
資源管理器
using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace day 09 小型資源管理器 檔案長度 public st...
簡單資源管理器
下面共享乙個我自己的資源管理器,很簡單的,看起來也明白,主要是我是新手,不想寫的太複雜,自己專案使用的好用,便是最好的。using unityengine using system.collections using system.collections.generic using system p...
Windows資源管理器
在資源管理器中,選定多個非連續檔案的操作為 a 按住shift鍵,單擊每乙個要選定的檔案圖示 b 按住ctrl鍵,單擊每乙個要選定的檔案圖示 c 先選中第乙個檔案,按住shift鍵,再單擊最後乙個要選定的檔案圖示 d 先選中第乙個檔案,按住ctrl鍵,再單擊最後乙個要選定的檔案圖示 檔案abc.bm...