關於資源管理類中的物件釋放問題

2022-05-18 11:24:01 字數 1779 閱讀 4881

別人的**

public

enum

resourcetype

private

hashtable m_prefabtable;

dictionary

dictionary;

public

scenemgr()

public gameobject load(resourcetype type, string path, bool cache = false

)

else

obj = resources.load(sbr.tostring()) as

gameobject;

if(cache)

}return

object.instantiate(obj);

}

gameobject go;

void

start ()

//update is called once per frame

void

update ()

if (input.getmousebuttondown(1

))

}

這個**沒什麼問題. 只需要在需要生成物體的地方呼叫一下,傳給乙個列舉資源型別, 乙個預設名字,和乙個是否使用快取的bool. , 我想用自己的方式實現了一下出了一些問題

細看:

public gameobject loadresources(resourcetype type, string path, bool iscache = true

)

}gotemp = resources.load(sbr.tostring()) as

gameobject;

object.instantiate(gotemp);

dictionary.add(sbr.tostring(), gotemp);

debug.log(

"new");

return

gotemp;

}

只是修改了這個類,乍一看沒什麼不一樣,只是改了一下列舉.tostring,節省了一些**, 但是實際上不是這樣的. 當我點選滑鼠右鍵的時候. 報了有資源在使用物件,不能夠destory, 問題有了 找了找解決了更改為如下**

1

public gameobject loadresources(resourcetype type, string path, bool iscache = true)2

17}1819 gotemp = resources.load(sbr.tostring()) as

gameobject;

2021

dictionary.add(sbr.tostring(), gotemp);

22 debug.log("

new"

);23

return

object.instantiate(gotemp);

2425 }

注意第15行和第23行, 這裡就是區別 , 這裡我猜測, 因為前邊的**是在這個類中生成的例項,而返回的是乙個記憶體的轉殖體, 在修改後直接將物件返回,就沒有出現資源在占用不能刪除這樣的錯誤了. 還挺奇怪的, 在這裡寫乙個記錄,

update: 又發現了乙個問題, 就是如果第三個引數傳的是false,那麼會出現key重複的情況, 所以下邊這種不可取, 還是使用上邊的方式

Starling之資源管理類

分享 概述每個遊戲或應用都必須有若干的資源 無論是紋理,聲音,位 字,或其它各種物件。這些資源可以是嵌入的 可以理解為所有資源都在乙個檔案的瀏覽器遊戲 或隨遊戲進行的 適用於手機遊戲儲存ram需要嵌入物件 在如何引入資源以不同的方式訪問它們有許多選擇。assetmanager幫助你做到這些。它是允許...

Starling之資源管理類

概述 每個遊戲或應用都必須有若干的資源 無論是紋理,聲音,位 字,或其它各種物件。這些資源可以是嵌入的 可以理解為所有資源都在乙個檔案的瀏覽器遊戲 或隨遊戲進行的 適用於手機遊戲儲存ram需要嵌入物件 在如何引入資源以不同的方式訪問它們有許多選擇。assetmanager幫助你做到這些。它是允許你以...

Item 14 資源管理類的拷貝

raii物件只能管理堆上new出來的資源,其它的不行。比如下面的mutex 只能自定義乙個資源管理類,來管理這個mutex資源,以防止它被意外地忽略。使用方法如下 如果拷貝乙個raii資源,會發生什麼?一般的處理方式 1 因為有的拷貝raii資源無意義,比如lock。所以禁止拷貝 2 如果拷貝有意義...