Lingo中的Parent和Child,官方文档中称之为Parent Script和Child Object,实际上就是类和类的实例。
构造new后返回me
说child object是parent script的self-contained,独立完备的一个实例。
区别实例用的地址,这个地址,就是me。
因此在每个parent script的构造函数new的最后,最重要的语句就是return me。
必须在new后返回当前实例的地址。
-- parent script
property myName
on new me, pName
myName = pName
return me
end
Child和Sprite、Movie
script实例和真正意义上的类的实例又有些许不同。
Director中的child object更像是对Director本身的对象Sprite,Movie等的一个扩展。
child附着在sprite和movie上,为其增加更多更灵活的功能。
而sprite和movie本身也提供了保存child object的列表:scriptInstanceList和actorList。
形象的说
Parent Script是cast列表中的一个cast member,
Child Object是sprite或movie上的behavior或script扩展(actor?)。
创建parent script
- 新建一个movie,Ctrl+N;
- 打开script window,Ctrl+0零;
- 写脚本script;
-- parent script
property myName
on new me, pName
myName = pName
return me
end
- 在property inspector的script标签中设为parent Type。默认movie;
- 将script命名为firstparent;(script windowt头部和cast window中都可对其命名)
用用看parent
child的new语法:
child名称 = new (script "parent名,即script名", 参数列表)
- 打开消息窗口,Ctrl+M;
- 输入
inst = new(script "firstparent","firstchild")
put inst.myName
- 会输出
-- "firstchild"
在Movie中用parent
- 在script窗口(Ctrl+0零)创建一个新的Script,默认Type为Movie,不动;
- 输入
on startMovie
inst = new(script "firstparent","firstchild")
put inst.myName && "created"
end
- 运行movie,Ctrl+ Alt +P;
- 会看到消息窗口输出,注意firstchild和created之间有个空格。&&操作符连接字符串会加空格。
-- "firstchild created"