Actionscript 3 AS3多个滚动对象

Actionscript 3 AS3多个滚动对象,actionscript-3,actionscript,instance,parent-child,rollover,Actionscript 3,Actionscript,Instance,Parent Child,Rollover,对AS3来说非常新。对不起,如果这个问题真的很基本,我试着四处寻找正确的答案,但只找到了半相关的问题。请帮忙 目标:我希望在同一舞台上播放多部翻滚电影,独立播放动画 到目前为止,我只有1个行为正常的MovieClip对象。如果我添加另一个,第一个会正常运行,但第二个根本不会出现。我知道它可能只是调用我第一次进入阶段的实例,我需要更改代码,使其具有“主”或父MovieClip,并且这些实例应该是子实例,但我不确定如何在代码中编写它们。最终,我的想法是添加我的孩子们的movieclips,然后稍微更

对AS3来说非常新。对不起,如果这个问题真的很基本,我试着四处寻找正确的答案,但只找到了半相关的问题。请帮忙

目标:我希望在同一舞台上播放多部翻滚电影,独立播放动画

到目前为止,我只有1个行为正常的MovieClip对象。如果我添加另一个,第一个会正常运行,但第二个根本不会出现。我知道它可能只是调用我第一次进入阶段的实例,我需要更改代码,使其具有“主”或父MovieClip,并且这些实例应该是子实例,但我不确定如何在代码中编写它们。最终,我的想法是添加我的孩子们的movieclips,然后稍微更改每个剪辑中的内容

到目前为止,我的代码是:

import flash.events.MouseEvent;


clip_boxes.removeEventListener(MouseEvent.ROLL_OUT, clipOut);
clip_boxes.addEventListener(MouseEvent.ROLL_OVER, clipOver);


function clipOver(event:MouseEvent):void {

 clip_boxes.addEventListener(MouseEvent.ROLL_OUT, clipOut);
 clip_boxes.removeEventListener(MouseEvent.ROLL_OVER,clipOver);
 clip_boxes.gotoAndPlay("Over");

};

function clipOut(event:MouseEvent):void {

clip_boxes.addEventListener(MouseEvent.ROLL_OVER, clipOver);   
clip_boxes.removeEventListener(MouseEvent.ROLL_OUT, clipOut);
clip_boxes.gotoAndPlay("Out");

};

你也可以在舞台上添加剪辑框的地方张贴代码吗?您是通过拖放或在代码中将它们添加到GUI中的吗

如果是这样,您可能需要在包含所有剪辑框的较大movieclip中创建每个剪辑框的实例。然后,您需要使用clip_box.box1等来引用每个文件

编辑:
哦,我看到你在那里有一张照片。我的错。确保为每个剪辑框指定其唯一的实例名称。您需要使用clip\u-box\u 1、clip\u-box\u 2等。然后在代码中使用clip\u-box\u 1。addEventListen…等。

有几种方法可以做到这一点。我将按最坏到最好的顺序列出

  • 手动向每个实例添加侦听器

    将新MovieClip拖到时间线上时,需要为其指定一个实例名称(可在“属性”面板中找到)。我不确定
    clip\u box
    是否是您打算播放所有电影剪辑的父时间表,或者它是否是您的电影剪辑本身

    假设您有3个具有实例名称的剪辑:
    MC1
    MC2
    MC3
    ,您可以这样做(在包含它们的时间线的第一帧上)

  • 使用继承

    这将涉及创建一个基类文件(.as文件),然后可以将其附加到所有MovieClips,以便它们继承其中的所有代码。下面是一个类文件的示例,可以为您执行此操作:(假设这是根目录中名为SubClass.as的文件)

    现在,当您创建movieClips时(或者在库中单击鼠标右键并选择“属性”),您可以为它们设置基类。如果将基类设置为上面的类,则它们会自动使用上面的代码,并将鼠标悬停/移出。(只要他们有Out/Over frame标签,它就可以正常工作)


  • 首先,非常感谢。其次,我尝试详细地实现继承方法,但它不起作用。它抛出的错误是:SubClass.as,第10行,第40 1046列:找不到类型,或者不是编译时常量?我认为我正确地设置了链接,甚至尝试在主时间轴操作层中调用“MC1.SubClass();”。不走运。我有什么遗漏吗?可能是因为其中一个进口站错了
    import Events.MouseEvent
    实际上应该是
    import flash.Events.MouseEvent
    -我更新了答案。
    MC1.addEventListener(MouseEvent.ROLL_OVER, clipOver);
    MC2.addEventListener(MouseEvent.ROLL_OVER, clipOver);
    MC3.addEventListener(MouseEvent.ROLL_OVER, clipOver);
    
    //If you had a whole bunch, you could also use a loop to add all the listeners
    
    
    //you use event.currentTarget to get a referce to the object the listener was attached to - this way you only need this one handler function
    function clipOver(event:MouseEvent):void {
        MovieClip(event.currentTarget).addEventListener(MouseEvent.ROLL_OUT, clipOut);
        MovieClip(event.currentTarget).gotoAndPlay("Over");
    };
    
    function clipOut(event:MouseEvent):void {  
        MovieClip(event.currentTarget).removeEventListener(MouseEvent.ROLL_OUT, clipOut);
        MovieClip(event.currentTarget).gotoAndPlay("Out");
    };
    
    package {
        import flash.display.MovieClip;
    import flash.events.MouseEvent;
    
        public class SubClass extends MovieClip {
            public function SubClass(){
                this.addEventListener(MouseEvent.ROLL_OVER, rollOver,false,0,true);
            }
    
            public function rollOver(event:MouseEvent):void {
                this.addEventListener(MouseEvent.ROLL_OUT,rollOut,false,0,true);
                this.gotoAndPlay("Over");
            }
    
            public function rollOut(event:MouseEvent):void {
                this.removeEventListener(MouseEvent.ROLL_OUT,rollOut,false);
                this.gotoAndPlay("Out");
            }
        }
    }