Re: [請益] 關於 Corona SDK 裡的"parent"的問題

看板GameDesign (遊戲設計)作者 (什麼....)時間9年前 (2016/01/17 17:20), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/2 (看更多)
: http://imgur.com/9GVoOTS
: 這張是比較詳細的範例 : 請問一下myLine.parent:remove(myLine)這邊 : 為什麼不直接用myLine:removeSelf()刪掉就好了, : 搞不太懂裡面的"parent"這段,這"雙親"到底有什麼功用?是什麼意思?且要怎麼使用? : 還有為什麼要再一開始就把myLine設成nil?? 想破腦袋都想不出到底是為什麼啊?? : 請神人幫忙解惑啊!謝謝~~? 我不是神人也完全不會 Corona, 所以可能有錯就等其他人補完 parent 應該是找該物件所屬的 DisplayGroup, 每個 DisplayObject 都有一個 Group, 可以在生成時決定,也可以之後再指定。 像 display.newLine 函式就有一個參數去指定物件的 Group, 這個參數是 optional 所以可以不填, 如果不指定就是掛在 display.currentGroup 底下。 DisplayGroup 在 Corona 就只是用來 將多個相同性質的物件以群組及階層式方式管理。 例如可以指定不同 group 的顯示順序, 像是將背景和前景各一個 group, 然後設定背景 group 先畫,讓背景在前景後面。 此外還有其他重要的功能,可參考 Corona 的教學: https://docs.coronalabs.com/guide/graphics/group.html DisplayGroup 的概念很簡單卻非常重要, 我想你的書裡應該也有提到這個部分。 移除畫面物件的方式有以下幾種,這三種看起來是沒啥差別: display.remove(object) myGroup.remove(object) //< displayGroup object.removeself() 不過 display.remove 還會多檢查物件不是 nil 才執行動作,即等同 if obj ~= nil then obj:removeSelf() end 所以 262 ~ 264 行的程式,直接寫成下面那行應該也會通。 display.remove(myLine); 關於 display.remove 可以參考以下連結: https://docs.coronalabs.com/api/library/display/remove.html 用上面方式移除物件後, 其實還是會留一些基本的屬性資料在上面, 如果確認物件的生命週期已完全結束,以後也不會再用到, remove 後需再將值設為 nil 才能將物件完全釋放: obj:removeSelf() obj = nil 不然可能會變成 memory leak .... 你就想成某些記憶體沒辦法釋放越積越多這樣 更多資訊可參考以下連結: https://docs.coronalabs.com/guide/media/displayObjects/index.html#remove 不過書裡 259 行的 nil 和 260 行不同縮排, 感覺跟你說的 "一開始" 沒有任何關聯 if ... // 處理別的事情 .... myLine = nil; elseif ... // 處理按球開始拖曳 .... end 看起來是這樣? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.198.40.192 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1453022400.A.0DD.html

01/17 21:59, , 1F
lua 蠻熟的 啊哈
01/17 21:59, 1F

01/18 22:43, , 2F
咦~對耶 原來是前一個if裡面的東西啊 XDD 難怪怎麼看怎麼
01/18 22:43, 2F

01/18 22:44, , 3F
文章代碼(AID): #1Mcrp03T (GameDesign)
文章代碼(AID): #1Mcrp03T (GameDesign)