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

作者: chowleft (什麼....)   2016-01-17 17:19:53
:

: 這張是比較詳細的範例
: 請問一下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
看起來是這樣?
作者: damody (天亮damody)   2016-01-17 21:59:00
lua 蠻熟的 啊哈
作者: r50o19 (打開推進器)   2016-01-18 22:43:00
咦~對耶 原來是前一個if裡面的東西啊 XDD 難怪怎麼看怎麼" target="_blank" rel="nofollow">

Links booklink

Contact Us: admin [ a t ] ucptt.com