遊戲資源快取ResourceCache

2021-06-19 14:30:00 字數 2519 閱讀 9323

資源快取記憶體的原理與其它記憶體快取記憶體的工作原理是相似的。在遊戲的狀態轉換過程中,有些資料是剛才使用過的,那麼直接從資源快取記憶體中載入即可。例如,rpg­遊戲中主角從大地圖進入乙個房間,探索一番後主角退出房間,此時只要直接從快取中載入大地圖資料即可,節省了從硬碟載入資料的時間,要知道從硬碟載入資料是非常­慢的。當然,如果你的遊戲所使用的資料檔案很少,那麼你可以在遊戲執行過程中把這些資料完全儲存在記憶體中,而不使用資源快取記憶體。

下面我將向你展示乙個比較簡單的資源快取記憶體管理器,如果你需要知道更多關於資源快取記憶體方面的知識,請參考<>的第八章。 

首先,需要乙個機制來唯一標識乙個資源,我們用下面這個結構來做資源控制代碼:

struct

reshandle

~reshandle()

std::

string

m_resname;

//資源名

void*

m_buffer;

//資源控制代碼所標識的資源

dword m_size;

//資源所佔記憶體大小

};

好了,現在我們可以從資源名來找出這個資源了,接下來實現這個資源快取記憶體管理器:

class

cachemanager

//得到快取大小,單位mb

intgetcachesize()

private

:void

free();

//釋放lru鍊錶中最後乙個資源

void

*update(reshandle

*res);

//更新lru鍊錶

reshandle

*find(std::

string

&resname);

//找出該資源名的資源控制代碼

private

:dword m_cachesize;

//快取大小

dword m_allocated;

//已使用的快取大小

//lru鍊錶,記錄最近被使用過的資源

std::list

<

reshandle

*>

m_lru;

//資源標識對映

std::map

<

std::

string

, reshandle

*>

m_resources;

};cachemanager:: cachemanager ()

cachemanager::

~cachemanager ()

void

*cachemanager::load(std::

string

resname, dword

*size)

else

m_allocated

+=_size;

buffer

=new

char

[_size];

//在這裡用任何你能想到的辦法載入資源檔案到 buffer……

//記錄當前資源

reshandle

*handle

=new

reshandle(resname, buffer, _size);

m_lru.push_front(handle);

m_resources[resname]

=handle;

if(size !=0

) *size

=_size;

return

buffer;

}return0;

}void

cachemanager::free()

void

*cachemanager::update(reshandle

*res)

reshandle

*cachemanager::find(std::

string

&resname)

至此,你已經可以在遊戲中快取任何你想快取的資源了

至此你已經可以在遊戲中快取任何你想快取的資源了,但是你的任務還沒完成,當你請求的資源存在於快取之外時,那個閃耀的硬碟燈可能就是玩家最感興趣的東西了。 

因此你必須根據不同的遊戲型別使用不同的載入方式: 

1. 一次載入所有東西:適用於任何以介面或關卡切換的遊戲 

2.只在關鍵點載入資源:很多射擊遊戲都使用這樣的設計,如「半條命」 

3.持續載入:適用於開放型地圖的遊戲,如「俠盜獵車手」 

4.如果有可能的話,你還可以使用快取**機制,當cpu有額外時間的時候可以把未來可能用到的資源載入到資源快取記憶體。 

最後,儘管在遊戲的資源管理中資源打包不是必須的,但仍然建議大家把資源檔案按型別分別打包到單一的檔案中,這將為你節省磁碟空間,並加快遊戲的載入速度。

遊戲中的資源管理 資源快取記憶體

1.什麼是資源快取記憶體 資源快取記憶體的原理與其它記憶體快取記憶體的工作原理是相似的。在遊戲的狀態轉換過程中,有些資料是剛才使用過的,那麼直接從資源快取記憶體中載入即可。例如,rpg 遊戲中主角從大地圖進入乙個房間,探索一番後主角退出房間,此時只要直接從快取中載入大地圖資料即可,節省了從硬碟載入資...

遊戲資源破解

2001年,從雲風那兒得知了ida這種好東東,看到他在解愷撒的遊戲資源,覺得好玩,也開始自己解一些東東,當時一口氣解了一些遊戲的資源,當然,都不是很複雜的,主要是台灣和日本的 後來在主頁上放過一段時間,記得感興趣的朋友還挺多的,一直沒時間說,現在大概聊一下做法吧 其實,資源破解,並不是很複雜,方法大...

5 3 儲存資源的快取

快取 快取是指 伺服器或客戶端本地磁碟內儲存的資源副本。利用快取可減少對源伺服器的訪問,因此也就節省了通訊流量和通訊時間。快取伺服器 快取伺服器是 伺服器的一種,並歸類在快取 型別中。換句話說,當 從伺服器返回的響應時,伺服器將會儲存乙份資源的副本,如果下次客戶端請求的資源已經被快取則直接由快取伺服...