无法在 AS3 中的影片剪辑上创建过滤器
Can't create filter on movieclips in AS3
经过与 flash 的长期斗争...
我有一些电影片段,我想只对我 MOUSE_OVER 的那个电影片段使用滤镜。
对于每个单独的动画片段,必须有不同于键入 MOUSE_OVER 和 MOUSE_OUT 的方法。
您可以通过多种方式解决此问题。
最佳:
使用继承。
如果您创建的 class 文件具有一组项目的所有通用功能,您可以让 MovieClip 继承该功能。因此,您将在根目录中创建一个如下所示的文件。 (姑且称之为FilteredMC.as
)
package {
import flash.events.MouseEvent;
public class FilteredMC extends MovieClip {
//the function that matches the name of class, is what runs when the object is created
public function FilteredMC():void {
this.addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
this.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
}
private function mouseOver(e:MouseEvent):void {
this.filters = [...your filter...]
}
private function mouseOut(e:MouseEvent):void {
this.filters = [];
}
}
}
然后在FlashPro中,右击你的库对象应该有这个功能,去“属性”,然后选择"export for actionscript"然后在“base class”文本字段,输入:FilteredMC。把你喜欢的任何东西作为 class 名称(只要它是唯一的并且不与任何其他 class 或关键字冲突)
好:
如果您的所有项目都是容器的唯一子项,您可以遍历该容器的所有子项并添加代码:(您也可以使用项目数组来执行此操作)
var i:int = containerMC.numChildren;
while(i--){
if(containerMC.getChildAt(i) is MovieClip){
setupFilter(containerMC.getChildAt(i) as MovieClip);
}
}
function setupFilter(mc:MovieClip):void {
mc.addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
mc.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
}
function mouseOver(e:MouseEvent):void {
//the event's 'currentTarget' property is the item you added the listener to
MovieClip(e.currentTarget).filters = [...your filter...]
}
function mouseOut(e:MouseEvent):void {
MovieClip(e.currentTarget).filters = [];
}
经过与 flash 的长期斗争...
我有一些电影片段,我想只对我 MOUSE_OVER 的那个电影片段使用滤镜。
对于每个单独的动画片段,必须有不同于键入 MOUSE_OVER 和 MOUSE_OUT 的方法。
您可以通过多种方式解决此问题。
最佳:
使用继承。
如果您创建的 class 文件具有一组项目的所有通用功能,您可以让 MovieClip 继承该功能。因此,您将在根目录中创建一个如下所示的文件。 (姑且称之为FilteredMC.as
)
package {
import flash.events.MouseEvent;
public class FilteredMC extends MovieClip {
//the function that matches the name of class, is what runs when the object is created
public function FilteredMC():void {
this.addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
this.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
}
private function mouseOver(e:MouseEvent):void {
this.filters = [...your filter...]
}
private function mouseOut(e:MouseEvent):void {
this.filters = [];
}
}
}
然后在FlashPro中,右击你的库对象应该有这个功能,去“属性”,然后选择"export for actionscript"然后在“base class”文本字段,输入:FilteredMC。把你喜欢的任何东西作为 class 名称(只要它是唯一的并且不与任何其他 class 或关键字冲突)
好:
如果您的所有项目都是容器的唯一子项,您可以遍历该容器的所有子项并添加代码:(您也可以使用项目数组来执行此操作)
var i:int = containerMC.numChildren;
while(i--){
if(containerMC.getChildAt(i) is MovieClip){
setupFilter(containerMC.getChildAt(i) as MovieClip);
}
}
function setupFilter(mc:MovieClip):void {
mc.addEventListener(MouseEvent.MOUSE_OVER, mouseOver);
mc.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
}
function mouseOver(e:MouseEvent):void {
//the event's 'currentTarget' property is the item you added the listener to
MovieClip(e.currentTarget).filters = [...your filter...]
}
function mouseOut(e:MouseEvent):void {
MovieClip(e.currentTarget).filters = [];
}