我试图创建一个自动倒带电影使用梯度掩码在闪存CS4使用AS3。我遇到的唯一问题是,当电影剪辑到达时间线的末尾时,maskingLayerMC就会松开它的梯度。因此,当电影倒转时,maskingLayer没有渐变。当游戏头到达第一帧并再次开始播放时,它恢复了它的梯度。
我也尝试过在最后一个框架中添加.cacheAsBitmap布尔属性,但是它没有任何效果,而且maskingLayerMC仍然放松了它的梯度。
--- FIRST FRAME ---
//Gradient Masking
maskedLayerMC.mask = maskingLayerMC;
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
//Automatically Rewind Movie Clip
var playBackwards:Boolean = false;
addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection (e:Event):void
{
if (playBackwards == true)
{prevFrame();}
else
{play();}
}
--- LAST FRAME---
//Change Boolean Variable To Rewind Movie Clip (Place In Last Frame)
stop();
playBackwards = true;更新的工作代码
不过,我不知道为什么要这样做,或者这是否是最好的解决方案。
--- FIRST FRAME ---
//Automatically Rewind Movie Clip With Gradient Masking
maskedLayerMC.mask = maskingLayerMC;
var playBackwards:Boolean = false;
addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection(e:Event):void
{
if (playBackwards == true)
{
prevFrame();
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
}
else
{
play();
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
}
}
--- LAST FRAME---
//Change Boolean Variable To Rewind Movie Clip (Place In Last Frame)
stop();
playBackwards = true;看来问题在于prevFrame()函数,因为仅仅在playDirection函数中添加属性是不够的。因此,令人沮丧的是,下面的代码不起作用。
addEventListener(Event.ENTER_FRAME, playDirection);
function playDirection(e:Event):void
{
maskingLayerMC.cacheAsBitmap = true;
maskedLayerMC.cacheAsBitmap = true;
if (playBackwards == true)
{prevFrame();}
else
{play();}
}发布于 2010-02-17 22:42:08
我试过重新创建你的窃听器,但对我来说很好。我的猜测是,由于使用了关键帧,关键帧具有在te舞台上重新实例化对象的不良副作用。只有当关键帧与对象放置在同一层时,这才是正确的。
不过,这只是猜测,因为我看不出你是如何设置你的FLA的。
下面是适用于我的代码,主要区别是我不使用框架脚本,而是使用一个类来处理对象,该对象包含动画电影和掩蔽电影。
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Test extends MovieClip {
public var ani:MovieClip;
public var mcMask:MovieClip;
public var dir:int = 1;
public function Test() {
ani.cacheAsBitmap = true;
mcMask.cacheAsBitmap = true;
ani.mask = mcMask;
addEventListener(Event.ENTER_FRAME, animate);
}
private function animate(e:Event) {
ani.gotoAndStop(ani.currentFrame + dir);
//change direction when the end or beginning is reached
if(ani.currentFrame == ani.totalFrames || ani.currentFrame == 1) {
dir *= -1;
}
}
}
}发布于 2010-02-17 22:06:49
您试过在最后一个框架中创建maskingLayerMC实例吗?我怀疑,因为它是在第一个框架中创建的,所以从Flash的角度来看,当您从最后开始创建时,掩码就不存在了。因此,直到它回滚回第一个帧,它才会被实例化。这有意义吗?
https://stackoverflow.com/questions/2284345
复制相似问题