Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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
Actionscript 3 Flex-TypeError:Error#1034:Type强制-对于同一模块中的两个不相关事件,父/子Sprite_Actionscript 3_Apache Flex_Flex4.5_Flexbuilder_Coercion - Fatal编程技术网

Actionscript 3 Flex-TypeError:Error#1034:Type强制-对于同一模块中的两个不相关事件,父/子Sprite

Actionscript 3 Flex-TypeError:Error#1034:Type强制-对于同一模块中的两个不相关事件,父/子Sprite,actionscript-3,apache-flex,flex4.5,flexbuilder,coercion,Actionscript 3,Apache Flex,Flex4.5,Flexbuilder,Coercion,这个问题已经停止了开发,我不知道出了什么问题。我不清楚flex是如何连接这两个不相关的事件的。Some1精灵在停止MouseeEvent的传播时,在MouseeEvent.MOUSE\u UP上发送Some1EEvent.MOUSE\u UP事件。Some1、Some2的父级也会在Some2上停止MouseEvent.MOUSE\u的同时发送Some2Event.MOUSE\u。强制错误介于Some2Event和Some1Event之间。由于这个错误,我尝试了其他#1034解决方案: 在主应用程

这个问题已经停止了开发,我不知道出了什么问题。我不清楚flex是如何连接这两个不相关的事件的。Some1精灵在停止MouseeEvent的传播时,在MouseeEvent.MOUSE\u UP上发送Some1EEvent.MOUSE\u UP事件。Some1、Some2的父级也会在Some2上停止MouseEvent.MOUSE\u的同时发送Some2Event.MOUSE\u。强制错误介于Some2Event和Some1Event之间。由于这个错误,我尝试了其他#1034解决方案:

  • 在主应用程序中添加Some1Event和Some2Event的实例化
  • 使用“新事件”包装-我无法将事件作为类型事件分派,因为它具有自定义属性
  • 我还尝试了以下代码:

        import flash.utils.getQualifiedClassName;
        private var systemManager:SystemManager=new SystemManager;
    
        private function addEventTracer():void
        {
            systemManager.addEventListener(Some1Event.MOUSE_UP, eventTracer, true);
        }
    
        private function eventTracer(event:Event):void
        {
            trace("Got ", event.type, "from", event.target, "as",
                getQualifiedClassName(event));
        }
    
    但它没有报告任何事情

    在将事件分派到Some2Event时,我得到了错误消息

    TypeError: Error #1034: Type Coercion failed: cannot convert  ::Some2Event@117c6c831 to Some1Event.
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at ::Some2/mouseUpHandler()[Some2.as:154]
    
    代码的结构是Some2(Sprite)有许多Some1(Sprite)的子级。在Some2中,我正在侦听Some1精灵上的MouseEvent.MOUSE\u UP事件,在该侦听器中,停止传播并发送自定义Some2Event:

        private function mouseUpHandler(event:MouseEvent):void{
            event.stopImmediatePropagation();
            var ev:Some2Event=new Some2Event(Some2Event.MOUSE_UP);
            ev.node2=this;
            dispatchEvent(ev);
    
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class Some2Event extends Event
    {
        public static const MOUSE_DOWN:String = "MOUSE_DOWN";
        public static const MOUSE_UP:String = "MOUSE_UP";
    
        public var node2:Sprite;
    
        public function Some2Event(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
    
        public override function clone():Event
        {
            return new Some2Event(type, bubbles, cancelable);
        }
    
    }
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN";
    public static const MOUSE_UP:String = "MOUSE_UP";
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN_SOME2";
    public static const MOUSE_UP:String = "MOUSE_UP_SOME2";
    
    在Some2中,我注册了以下事件侦听器:

        private function registerListeners():void
        {
            addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); //detects mouse up on Some2 Sprite
            addEventListener(Some1Event.MOUSE_UP, some1MouseUpHandler); //detects mouse up on Some1 Sprite, custom event, Some1 mouse up stopped in Some1
            addEventListener(Event.ADDED, addedHandler); //detecting add of child Some1
        }
    
    Some1事件和Some2事件几乎相同:

    import flash.display.Sprite;
    import flash.events.Event;
    
    
    public class Some1Event extends Event
    {
    
        public static const MOUSE_DOWN:String = "MOUSE_DOWN";
        public static const MOUSE_UP:String = "MOUSE_UP";
    
        public var node:Sprite;
    
        public function Some1Event(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
        public override function clone():Event
        {
            return new Some1Event(type, bubbles, cancelable);
        }
    
    }
    
    还有一些事件:

        private function mouseUpHandler(event:MouseEvent):void{
            event.stopImmediatePropagation();
            var ev:Some2Event=new Some2Event(Some2Event.MOUSE_UP);
            ev.node2=this;
            dispatchEvent(ev);
    
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class Some2Event extends Event
    {
        public static const MOUSE_DOWN:String = "MOUSE_DOWN";
        public static const MOUSE_UP:String = "MOUSE_UP";
    
        public var node2:Sprite;
    
        public function Some2Event(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
    
        public override function clone():Event
        {
            return new Some2Event(type, bubbles, cancelable);
        }
    
    }
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN";
    public static const MOUSE_UP:String = "MOUSE_UP";
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN_SOME2";
    public static const MOUSE_UP:String = "MOUSE_UP_SOME2";
    

    非常感谢您的帮助。

    某些事件中的常量:

    public static const MOUSE_DOWN:String = "MOUSE_DOWN";
    public static const MOUSE_UP:String = "MOUSE_UP";
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN_SOME1";
    public static const MOUSE_UP:String = "MOUSE_UP_SOME1";
    
    Some2Event中的常量:

        private function mouseUpHandler(event:MouseEvent):void{
            event.stopImmediatePropagation();
            var ev:Some2Event=new Some2Event(Some2Event.MOUSE_UP);
            ev.node2=this;
            dispatchEvent(ev);
    
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class Some2Event extends Event
    {
        public static const MOUSE_DOWN:String = "MOUSE_DOWN";
        public static const MOUSE_UP:String = "MOUSE_UP";
    
        public var node2:Sprite;
    
        public function Some2Event(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
    
        public override function clone():Event
        {
            return new Some2Event(type, bubbles, cancelable);
        }
    
    }
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN";
    public static const MOUSE_UP:String = "MOUSE_UP";
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN_SOME2";
    public static const MOUSE_UP:String = "MOUSE_UP_SOME2";
    
    在每种情况下,常量值都是相同的。”“鼠标向下”或“鼠标向上”。您希望Flex如何区分这两者之间的区别?不可能!将常量值更改为唯一

    在某些事件中:

    public static const MOUSE_DOWN:String = "MOUSE_DOWN";
    public static const MOUSE_UP:String = "MOUSE_UP";
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN_SOME1";
    public static const MOUSE_UP:String = "MOUSE_UP_SOME1";
    
    在某些事件中:

        private function mouseUpHandler(event:MouseEvent):void{
            event.stopImmediatePropagation();
            var ev:Some2Event=new Some2Event(Some2Event.MOUSE_UP);
            ev.node2=this;
            dispatchEvent(ev);
    
    import flash.display.Sprite;
    import flash.events.Event;
    
    public class Some2Event extends Event
    {
        public static const MOUSE_DOWN:String = "MOUSE_DOWN";
        public static const MOUSE_UP:String = "MOUSE_UP";
    
        public var node2:Sprite;
    
        public function Some2Event(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
    
        public override function clone():Event
        {
            return new Some2Event(type, bubbles, cancelable);
        }
    
    }
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN";
    public static const MOUSE_UP:String = "MOUSE_UP";
    
    public static const MOUSE_DOWN:String = "MOUSE_DOWN_SOME2";
    public static const MOUSE_UP:String = "MOUSE_UP_SOME2";
    
    现在Flex将两个事件视为不同/唯一的,并且在调度另一个事件时不会调用一个事件的侦听器