返回列表 回复 发帖

用Director控制动画GIF

作者:Atla(翻译)  出处:奥古多媒体
  动画GIF可以非常方便的用在你的Director作品中。它们很小,相对的比较容易建立,而且也可以用在Web页面里。所以如果你正在建立一个Shockwave短片并把它和Web页放在一起,那么你把动画GIF用到Director里,你就会发现它可以完成多么完美的场景。但是一旦你把动画GIF放进你的电影里,你可能会想到要增加一些控制方法以便于关闭它们。首先,你要从基础开始。

  开始,停止和重复

  这三个基本的Lingo命令是用来控制动画GIF的暂停,继续和重复的。当用这些命令的时候,你需要紧记的是:它们只能与一个sprite在关联中一起用。例如,你可以说:

sprite (10).resume ()

或者

sprite (10).pause ()

  然而,在涉及到一个cast成员的时候,你不能用这些功能。所以如果你输入member (‘‘animGIF‘‘).resume (),Director会返回一个错误信息,里面会说在对象中没有找到处理者。

  在电影中使用暂停和继续的一个简单的方法就是建立一个行为,你要把它放进动画GIF中。这个行为可以使正在播放的GIF暂停,也可以使暂停的GIF开始播放。这个行为的原代码如下:

property pPlayState

on beginSprite me
  
  pPlayState = true
  me.updateGIF ()
  
end

on mouseUp me
  
  pPlayState = not pPlayState
  me.updateGIF ()
  
end

on updateGIF me
  
  if pPlayState then
    sprite (me.spriteNum).resume ()
  else
    sprite (me.spriteNum).pause ()
  end if
  
end

  这个行为开始于设置pPlayState变量为真,然后会呼叫updateGIF处理者。这个处理者就会检查pPlayState是否为真。如果为真,那么它就会播放动画GIF,否则它就会暂停动画GIF。最后,无论何时,只要你点击GIF,它都会固定pPlayState的值并且以呼叫ipdateGIF处理者来确定是播放还是暂停。

  控制动画GIF的速度

  如果你想要控制一个动画GIF的速度,那么这里有两条Lingo语句你需要使用:playBackMode 和 fixedRate。

  PlayBackMode语句有三个不同的选项来控制一个动画GIF如何播放。第一个选项,#normal,用动画GIF本身的定时信息来确定帧的的播放时间。第二个选项,#lockStep,像Director电影中的Score一样以同样的速度播放动画GIF的每一帧。这个选项用于确认动画与你电影中的基础帧动画同步。这个选项的基本意思就是说如果你的动画GIF有不同长度的帧,那么在播放时就会不同步,直到playBackMode被设置成#normal。

  playBackMode的最后一个选项是#fixed。当你把一个动画GIF的playbackMode设置成#fixed,那么你就可以通过另一个叫fixedRate的Lingo特性来控制回放(playback)。fixedRate特性一个数字,它描述一个动画GIF的单独帧的速度。你必须记住当你设置fixedRate时,它的值必须是一个整数而且不能为0—它至少是1。如果你想停止动画GIF,你必须用暂停命令。

  关于暂停,继续和重复还有playBackMode和fixedRate特性,它们最大的不同在于playBackMode 和fixedRate是cast成员中的特性,而不是sprite。所以在你的代码中你必须写明:

member (‘‘animGIF‘‘).playBackMode = #fixed
member (‘‘animGIF‘‘).fixedRate = 20

But if you tried to say

sprite (10).playBackMode = #fixed

  并且在sprite 10中的成员不是一个动画GIF,那么你将得到一个错误信息。

  当你把所有的事情放在一起做时,你会吃惊于你可以如此控制一个动画GIF。这里有一个电影可以示范action中这里提到的Lingo。(相关附件请点击这里下载)

  在你的Director电影中使用动画GIF是减小文件大小的一个有效的方法,并且潜在的节约你大量的时间,因为你可以使Director中己存在的动画GIF得不到休息的时间。动画GIF的唯一的缺点就是你不能完全的控制它。你不能让一个动画GIF跳到一个特定的帧上,而且你不可能轻易的知道哪个帧是在动画GIF上的。如果你需要在你的程序中加入这种功能,那么你有两个选择。你将要用位图和电影遁环来重做Director里的动画GIF或者你在Director里可以以Quicktime movie的格式导入动画GIF。但是这个最后的选择要求用户的机子里安装了Quicktime。
原以为自己很懂,
现在却发现..
原来自己什么都不懂....
返回列表