遊戲中的資源管理器

2021-04-19 08:51:53 字數 2356 閱讀 6804

我寫過乙個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...