Actionscript 3 Flex-TypeError:Error#1034:Type强制-对于同一模块中的两个不相关事件,父/子Sprite
这个问题已经停止了开发,我不知道出了什么问题。我不清楚flex是如何连接这两个不相关的事件的。Some1精灵在停止MouseeEvent的传播时,在MouseeEvent.MOUSE\u UP上发送Some1EEvent.MOUSE\u UP事件。Some1、Some2的父级也会在Some2上停止MouseEvent.MOUSE\u的同时发送Some2Event.MOUSE\u。强制错误介于Some2Event和Some1Event之间。由于这个错误,我尝试了其他#1034解决方案: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解决方案: 在主应用程
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将两个事件视为不同/唯一的,并且在调度另一个事件时不会调用一个事件的侦听器