主题:  请教大虾Director的几种脚本到底该怎么写?

zzcrc

职务:普通成员
等级:3
金币:1.0
发贴:961
#12001/2/6 15:34:10
我现在正在学习Director8,我搞不清楚Director8中的几种脚本到底该写到那里?有谁能举个简单生动的例子为我说说呢?我想了很久也想不明白!



我就是我

职务:版主
等级:6
金币:14.0
发贴:5466
#22001/2/6 18:08:43
你还是说说你打算学一些什么脚本吧



zzcrc

职务:普通成员
等级:3
金币:1.0
发贴:961
#32001/2/7 2:40:05
我知道我问的问题可能很笨,但是我确实是糊涂了。脚本有很多种:电影脚本、角色脚本、行为脚本、桢脚本、精灵脚本。这些一大堆可以写脚本地地方,到底什么时候该往哪个脚本上填东西?请各位老大赐教!



5D荣誉斑竹

职务:版主
等级:3
金币:10.0
发贴:786
#42001/2/7 10:42:24
听说过"面向对象"这个词吗,我想Director的lingo也应该是面向对象的吧,所以一般你要操作的对象是什么,你的脚本就应该往那里写了



mmzr

职务:普通成员
等级:1
金币:0.0
发贴:87
#52001/2/7 11:40:37
如果你想在某一帧上暂停,当然用帧脚本比较方便。
如果你想用一个按钮触发某一个事件,当然用行为脚本或精灵脚本比较方便。(行为脚本
可以重用,而精灵脚本不行。)
如要你想定义某一个全局变量或是电影在一开始时便进行某一初始化,当然用电影脚本较方便。



Call Me Simon

职务:普通成员
等级:2
金币:2.0
发贴:646
#62001/2/7 16:58:06
这个问题是一个非常基础的问题, 不过也是学习lingo 的一个难点。 我可以试着用我的理解来解释一下。

正如反斗星所说的, director是面向对象的环境, 不过几种类型的脚本还不完全是仅仅针对对象来使用。

简单地说, Director的Lingo 是响应事件来激发scripts的。

事件 ------------> 信息 -------------〉句柄 (Event generates message, and then message triggers handler)

例如: 电影开始播放(当你按下play的按键)是一个事件(the movie starts), 它会产生一个信息(a message called startMovie) 用lingo来说就是startMovie, 这个信息会传递给movie 本身, 来查找是否有和该信息相关的句柄来给movie 指令, 如果你写了一个脚本使用
on startMovie
    指令
end 

这个句柄就是专门响应startMovie信息的。 所以电影一开始, 就会执行这个handler 里的指令。

不要忘记Director 是一个Timeline based 编辑环境, 理解timing (时机), 对于Lingo的应用是最关键的, 所以Director自身就内建了一些基于不同情形(实际上还是不同的时机)的句柄, Director 7 有37个的样子, 当然你可以写自定义的句柄。那是后话。

从另一个方面来看, 一个Director电影的实现是通过sprites在舞台(stage)上不同时间(frame)的出现和表演来完成的, 对于电影的控制从面向对象的角度来考虑, 就成了对于sprites , 产生sprites 的cast members, frames, 以及电影本身的控制, 这也就是这个问题的由来, 简单地说, Lingo有这四种基本的script 类型, 精灵脚本(sprite script),角色脚本(cast script), 帧脚本(frame script), 和电影脚本(movie script), 其中精灵脚本和帧脚本又都被称为行为脚本(behavior script)。 这几种脚本的句型和语法是一样的, 使用的句柄却并不相同, 因为事件产生的信息是broadcast 给整个电影的, 不过不同的对象可以接受的信息却是不一样的, 例如startMovie这个信息对于sprite来说就全无作用, 因为电影开始的时候, sprites 还不在舞台上, 你可以看到“刚”这个timing 是多么的关键。

好既然谈到broadcast, 那就必须要说一说信息传递的层次, 一旦高级别层次的script 收到了信息它就会就地消化该信息,如果没有高层次的script消化, 它就传到下一个层次, 以此类推。Lingo的信息传递层次是:sprite script ----> cast script -----〉frame script -------> movie script, 其实这个结构也很好记忆, sprite好比剧情里的角色, 当然最先接受信息, 其次是扮演角色的演员(我个人觉得不翻译sprite, cast member等词的好处就是不要造成歧义, 如果一定要翻译, 我倾向于sprite 译成角色, cast member译成演员。 因为常识告诉我们一个演员可以根据剧情的需要扮演不同的角色, 这只是我的一家之言),再下来就是frame , 最后是movie.

所以使用那种script类型取决于你所控制的对象和使用的时机。

最后要说的是, 行为脚本(sprite script 和 frame script)需要附加在score(分镜表)里的sprites 或behavior channel才会起作用, cast member script 是附加在cast member(cast window)上的, movie script 不需要附加在任何对象上。

我相信这样的解释不可能令你完全明白, 你还需要读一下帮助文件以及有关的书籍, 再加上实践。而且这个解释只是为了理解的方便, 还有一些细节并未提及而且也已超出论坛可以解释的范围了。

如有错误欢迎指正和讨论。



xuyi_5d

职务:普通成员
等级:2
金币:1.0
发贴:179
#72001/2/8 8:36:23
在D8中,可以用演员属性方便的在 movie,behavior,parent三种类型中转换



donlee

职务:普通成员
等级:1
金币:1.0
发贴:271
#82001/2/8 11:40:32
买一本《Director7开发使用手册》看一下,会有收获的。
另一个忠告是多练习和测试。



hatu_5d

职务:普通成员
等级:1
金币:0.0
发贴:20
#92001/2/9 11:16:44
好呀!真是解释得很清楚,捅破窗户纸的感觉非常好!:)
非常感谢!


想睡,,睡不着。。。

zzcrc

职务:普通成员
等级:3
金币:1.0
发贴:961
#102001/2/10 17:42:48
谢谢各位老大的解释,我现在弄明白了不少了,看来我得动手做点东西啦!再次谢谢各位帮忙!希望以后大家能够多帮帮忙,我还有很多问题的哦!我发现我真的很笨单!