Re: [请益] 关于 Corona SDK 里的"parent"的问题

楼主: chowleft (什么....)   2016-01-17 17:19:53
: 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
看起来是这样?
作者: damody (天亮damody)   2016-01-17 21:59:00
lua 蛮熟的 啊哈
作者: r50o19 (打开推进器)   2016-01-18 22:43:00
咦~对耶 原来是前一个if里面的东西啊 XDD 难怪怎么看怎么http://imgur.com/mJVaR01

Links booklink

Contact Us: admin [ a t ] ucptt.com