table表遍歷對象時找不到對象的原因

先初始化10個怪物對象,entity是繼承newNode的。

self.monsters = {}
for i=1,10 do
     self.monsters[i]=entity.new()
end

但是在使用self.monsters裏面的對象時候,只能使用一次,然後就找不到下一個對象了。爲什麼?


原因很簡單,因爲newNode的初始化函數裏面是添加了autorelease的,在第一幀能運行,self.monsters遍歷下一個對象時候就被釋放了。所以請注意,在把cocos2d對象存到table時候添加retain。比如以上的:

for i=1,10 do
      self.monsters[i]=entity.new()
      self.monsters[i]:retain()
 end


這樣對象就一直存在table中了,而不會釋放。以前在C++的時候把對象加到CCArray卻不會自動釋放,因爲CCArray會爲每一個添加進來的對象加上retain呀,但table不同,table只是一個空的集合而已,不會做其他的操作。

發佈了50 篇原創文章 · 獲贊 0 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章