Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 在CustomEvent类上调度事件时丢失_Flash_Actionscript 3_Events - Fatal编程技术网

Flash 在CustomEvent类上调度事件时丢失

Flash 在CustomEvent类上调度事件时丢失,flash,actionscript-3,events,Flash,Actionscript 3,Events,这是我一直试图实现的目标,但运气不佳。我有一个简单的swf,名为btn.swf。它有一个按钮,当它被点击时,它会向它的父“主应用程序”发送一个事件 然后,我编写了一个CustomEvent类,“btn.swf”扩展到。swf创建CustomEvent的实例并分派事件 为了将swf内容加载到“主应用程序”中,我编写了一个CustomLoader,它扩展了Sprite类。CustomLoader将内容加载到“主应用程序”中 我无法在“主应用程序”中捕获已调度事件。我花了一天的时间在这上面,现在几乎用

这是我一直试图实现的目标,但运气不佳。我有一个简单的swf,名为btn.swf。它有一个按钮,当它被点击时,它会向它的父“主应用程序”发送一个事件

然后,我编写了一个CustomEvent类,“btn.swf”扩展到。swf创建CustomEvent的实例并分派事件

为了将swf内容加载到“主应用程序”中,我编写了一个CustomLoader,它扩展了Sprite类。CustomLoader将内容加载到“主应用程序”中

我无法在“主应用程序”中捕获已调度事件。我花了一天的时间在这上面,现在几乎用尽了我所能想到的一切。我将非常感谢您的帮助

让我回顾一下我的班级结构:

BtnClass扩展了CustomEvent类。Btn类分派一个事件 然后将BtnClass发布为btn.swf

CustomLoader类被CustomMain类用来加载btn.swf并捕获btn.swf发送的事件

已发送事件正在某个位置的翻译中丢失。也许我对整件事的看法是错误的

以下是课程: 自定义事件类

班主任

自定义加载器类

CustomMain类


谢谢。

看起来您没有在BtnMain.as中将事件设置为气泡,因此CustomLoader将不会收到它。尝试在btnHandler中更改此行以将气泡设置为true:

evt = new CustomEvent(CustomEvent.BUBBLE_UP, obj, true, false);

你就快到了,你只需要听正在发送的对象。 因此,在主类中,参考BtnMain,并向其添加EventListener

package com.apps.comps
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.errors.*;
import com.apps.comps.*;

public class CustomMain extends Sprite
{
    var custLdr:CustomEvent;
    var obj:Object = {name:'SUPERMAN', game:'FLYING'};

    public function CustomMain()
    {
        var btnMain:BtnMain = new BtnMain();
        addChild(btnMain);

        /* This is the line you need */
        btnMain.addEventListener(CustomEvent.BUBBLE_UP, vHandler);

    }

    function vHandler(e:Event):void
    {
        trace('TARZAN');
    }

}
}

您说过BtnMain扩展了CustomEvent类——这在两个方面都是错误的——如果它是真的,它将不起作用,并且您的代码显示它不是真的。BtnMain扩展了Sprite。试试这个:嘿,Amarghosh,非常感谢你的链接。我会试试看。谢谢
package com.apps.comps
{
    import flash.display.*;
    import flash.net.*;
    import flash.events.*;
    import com.apps.comps.*;

    public class CustomLoader extends Sprite
    {
        // URLLoader already has a data property, so I used extraData
        private var _path:String;
        public var _ldr:Loader;
        public var eData:*;

        public function CustomLoader($path:String)
        {
            this._path = $path;
            loadContent(this._path);
        }       

        private function loadContent(e:String):void
        {
            this._ldr = new Loader();
            this._ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            this._ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
            this._ldr.load(new URLRequest(e));
        }

        private function progressHandler(e:ProgressEvent):void
        {
            var percent:uint = Math.round((e.bytesLoaded / e.bytesTotal) * 100);
            trace(percent);
        }

        private function onCompleteHandler(e:Event)
        {
            e.target.dispatchEvent('BubbleUp');
            this._ldr.contentLoaderInfo.addEventListener(CustomEvent.BUBBLE_UP, vHandler);
        }       

        public function vHandler(e:CustomEvent):void
        {
            trace(e);
        }

        override public function dispatchEvent(event: Event) : Boolean
        {
            var customEvent: CustomEvent = new CustomEvent(event.type, extraData, event.bubbles, event.cancelable);
            return super.dispatchEvent(customEvent);
        }

    }
}
package com.apps.comps
{
    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.errors.*;
    import com.apps.comps.*;

    public class CustomMain extends Sprite
    {
        var custLdr:CustomEvent;
        var obj:Object = {name:'SUPERMAN', game:'FLYING'};

        public function CustomMain()
        {
            //custLdr = new CustomLoader('movies/btn.swf');
            //addChild(custLdr);
            this.dispatchEvent(CustomEvent(obj));           
            this.addEventListener(CustomEvent.BUBBLE_UP, vHandler);

        }

        function vHandler(e:Event):void
        {
            trace('TARZAN');
        }

    }
}
evt = new CustomEvent(CustomEvent.BUBBLE_UP, obj, true, false);
package com.apps.comps
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.errors.*;
import com.apps.comps.*;

public class CustomMain extends Sprite
{
    var custLdr:CustomEvent;
    var obj:Object = {name:'SUPERMAN', game:'FLYING'};

    public function CustomMain()
    {
        var btnMain:BtnMain = new BtnMain();
        addChild(btnMain);

        /* This is the line you need */
        btnMain.addEventListener(CustomEvent.BUBBLE_UP, vHandler);

    }

    function vHandler(e:Event):void
    {
        trace('TARZAN');
    }

}
}