【问题标题】:AS3 duplicated MovieClipAS3 复制的 MovieClip
【发布时间】:2015-11-07 20:00:39
【问题描述】:

在我的应用程序中,我正在将影片剪辑从库中导入到舞台,如下所示:

package {

import flash.display.*;
import flash.text.*;
import flash.events.*;
import flash.ui.Keyboard;
import flash.ui.Mouse;
import flash.display.MovieClip;

public class MainTimeline extends MovieClip {

    //Variabili
    public var VFullscreen: int = 1;

    //Import var        
    public var VTerminal: Terminal = new Terminal();
    public var nTerminal:String;

    public function MainTimeline(): void {

        stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;

        //Import

        //Terminal
        VTerminal.x = 288;
        VTerminal.y = 384;
        stage.addChild(VTerminal);


        //Event Listeners
        //addEventListener(MouseEvent.CLICK, fl_BringToFront);
        VTerminal.addEventListener(MouseEvent.MOUSE_DOWN, fl_WindowDrag);
        VTerminal.addEventListener(MouseEvent.MOUSE_UP, fl_WindowDrop);
    }

    //public functions

    //Gestione Fullscreen

    public function fl_Fullscreen(event: MouseEvent): void {
        switch (VFullscreen) {
            case 0:
                stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
                VFullscreen = 1;
                break;
            case 1:
                stage.displayState = StageDisplayState.NORMAL;
                VFullscreen = 0;
                break;
        }
    }

    public function fl_FSCheck(event: Event): void {
        if (stage.displayState == StageDisplayState.NORMAL) {
            VFullscreen = 0;
        }
        if (stage.displayState == StageDisplayState.FULL_SCREEN_INTERACTIVE) {
            VFullscreen = 1;
        }
    }

    //Primo Piano Finestre
    public function fl_BringToFront(event: MouseEvent): void {
        this.addChild(event.currentTarget as DisplayObject);
    }


    public function fl_WindowDrag(event: MouseEvent): void {
        event.currentTarget.startDrag();
        nTerminal = event.currentTarget.name.toString();
        trace(nTerminal);
    }

    public function fl_WindowDrop(event: MouseEvent): void {
        event.currentTarget.stopDrag();
    }

    //Chiusura
    public function fl_Close(event: MouseEvent): void {
        stage.nativeWindow.close();
    }

    //Apertura/Chiusura Terminal
    public function fl_Terminal(event: MouseEvent): void {
        if (contains(VTerminal)) {
            removeChild(VTerminal);
        } else {
            VTerminal.x = 288;
            VTerminal.y = 320;
            addChild(VTerminal);
        }
    }

}

}

但我有一个从未见过的奇怪错误。它有两次相同的 MC,在运行时,当我拖放它时,我可以看到 2 个 MC,一个名为 instance8,一个名为 instance45。我不知道如何解决这个问题。 提前致谢。

终端类

package {

import flash.display.MovieClip;
import flash.events.*;
import flash.ui.Keyboard;
import flash.text.TextField;


public class Terminal extends MovieClip {

    public var version: String = "Verison 0.0.1 a";

    public function Terminal(event: Event) {
        //Varie
        nome.text = "terminal";
        vOut.text = version;

        //Animazioni
        loader0.gotoAndPlay(1);
        loader1.gotoAndPlay(25);
    }

}

}

【问题讨论】:

  • 不清楚你在做什么。你把这段代码放在哪里了?拖放是如何实现的?
  • 你能展示你的整个代码吗?并验证您是否还没有手动插入舞台的实例。
  • 我用完整的代码编辑过,是的,舞台上没有实例
  • 要拥有两个,必须在某处有一个 new 关键字或放在时间轴上。也许显示您的终端课程。这段代码就是你的文档类吧?
  • @LoreSchaeffer 抱歉,您能否澄清您的陈述“是的,舞台上没有实例”?例如,您在舞台上是否已经有一个从库中拖到那里的实例?

标签: actionscript-3 flash addchild


【解决方案1】:

据我所知,声明

//Primo Piano Finestre
public function fl_BringToFront(event: MouseEvent): void {
    this.addChild(event.currentTarget as DisplayObject);
}

当 mouseDown 和 mouseUp 事件结束后,mouseEvent.click 事件会触发,所以你会得到另一个实例

【讨论】:

  • 这只是一个演员表。没有创建新实例。
  • 不可能是那个功能,因为没有那个我也有同样的问题
  • this.addChild 不会创建另一个实例。如果您添加的对象已经添加到不同的父对象,它将被移动。如果它已经添加到同一个父级,它只会被移动到最顶层。 不会被复制
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 2010-11-28
  • 2011-02-24
  • 1970-01-01
相关资源
最近更新 更多