字体: | 推荐给好友 上一篇 | 下一篇

从Flash到 Director

发布: 2010-7-03 01:43 | 作者: 干海棠 | 来源: 网络转载 | 查看: 251次

也许你是初学者, 导入Director Flash movie 可以控制Director这就给了我们绝佳的机会在Director里使用Flash 按钮,那么Flash 是如何传递信息给Director呢?事实上,常用的方法有三种, 都是利用Flash Actionscript里的GetURL指令,这个指令其实是非常多样化的, 可以用来控制浏览器, 传递javascript 指令, 控制打印功能, 同时也是与Director沟通的重要通道,同时这个指令在各个Flash版本里都兼容。好, 我们就来比较一下这三种方法: 

1. 传递一个字符串(pass a string)

最直接的方法就是写一个字符串在Flash  然后传递给Director, 再由Director Lingo的特定句柄来接受该字符串作为指令参数

下面的例子是一个Flash 按钮来控制Director的电影来其移动播放头到一个指定的帧, 我们用帧的标签(marker)来标记。在Flash对按钮在舞台上的instance 应用Actionscript 具体地说就是用GetURL这个指令, 当然这儿不是用来指向一个网址的, 而是用来和Director沟通。  

这里我使用Flash 3中的截图,在GetURL的参数栏里填入 "section1"作为字符串,而这个字符串就是下图可见的Director 电影里的帧的标签名。  

好, 来到Director 中, Score窗口可以看出有两个场景, 第一到第五帧是导入的shockwave Flash 按钮(非常小只有522bytes从第十五到第二十帧是另一场景, 你可以看到帧的标签“section1你现在为一要做的就是写下下面的behavior 然后赋予给舞台上的flash 按纽。具体的语句如下:

on getURL me, flashString 

go to frame flashString

end getURL

这里我们应用了lingo里预设的事件 "getURL" 来响应Flash 按钮被按下时所需执行的指令, "flashString" 就是需要传递给下一句 "go to"命令的参数。当然它可以任何的变量名字,只要它符合变量命的命名规则。

2. 直接传递Lingo 指令(Make a Lingo statement directly)

这种方法也非常的直截了当, 你可以直接就写下lingo 的指令作为GetURL的参数

 

请注意你在参数栏先写下:“Lingo: 来告诉 Flash它后面的内容是Lingo 指令而已。还有一点要注意的是请按照Lingo 的语法来书写尤其是冒号(“”)的使用。 

这回在Director里更简单了, 你什么都不需要做, 导入Flash 按钮象上面的例子那样布置好舞台就行了。也许你以为这是最简单方便的做法, 不过lingo程序员却不会这么想, 这是典型的hard-code, 缺少灵活性, 一旦你的舞台布置有了改变, 你就得回到Flash 从头来过。那么Lingo程序员喜欢什么样的方式来让Flash Director来沟通呢? 请看下面的方法。

3. 传递一个事件来激活Lingo 句柄(Specify an event to call a Lingo handler 

这次在GetURL的参数栏里, 你要填入的是:

 

event: FlashMouseUp "section1"

关键是用 "event:"这个关键词来告诉Flash, 这次要传递给Director 的是一个事件以及可能和该事件有关的参数, 你可以完全个性化设置事件名以及参数内容。

 

Director里, 这次你要写的lingo behavior是:

on FlashMouseUp me, textString

go to frame textString

end

其实更好更灵活的写法是:在Flash里只写事件名, 例如: “event:butnClick”,记得不要勾选expression; 回到Director你这样写behavior:

on butnClick me

doAction(“section1”) me

end 

on doAction(var) me

go to var

end

这样你就保持了在Director里的完全控制, 如果你希望响应这个事件来完成其他的动作, 无需返回Flash 在上面的behavior里稍作修改就成了, 是不是更方便呢。 通常作为Lingo 程序员关心的是使用的灵活性和可重复使用性。一般的说, 好的lingo script 难写易用, 而一般的用户写的lingo script 看起来简单, 使用起来却很不方便。这也是初学者要克服的一个难点。

lsah和director可以很好的沟通。

现在d8.5可以支持flash5的actions了。上述问题当然最简洁的办法是在d中写script,若一定要在flash中解决,可以这样(以d8和flash5作为运行环境,供参考):

假如在Flash中用button来控制d的播放头可以在flash中的butt中的action里输入:



on (release) {

// getURL (‘‘lingo:go to frame 12‘‘);

// getURL (‘‘lingo:go to \‘‘target\‘‘\‘‘);

// getURL (‘‘event:buttup‘‘);

}



解释一下: 

getURL (‘‘lingo:go to frame 12‘‘) 表示flash直接执行lingo,跳转到第12帧。

getURL (‘‘lingo:go to \‘‘target\‘‘\‘‘) 跳转到marker ‘‘target‘‘所在的帧。

// getURL (‘‘event:buttup‘‘) 执行事件 buttup。 同时须在d中写 buttup 的事件 比如这样

on buttup

put ‘‘succeed‘‘

go to frame 12

end

一般我们都喜欢第三种方法。因为它比较灵活,不用来来回回改swf。需要实例的朋友可以发email给我。欢迎指正,交流。[email protected]



TAG: director flash lingo geturl 传递 actionscript

 

评分:0

我来说两句

Creative Commons License本站作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
欢迎向站长短信举报非法信息,站长短信接收平台:+ 086 138 6514 1572