这是我在actionscript中的小问题。为了简单起见,我把两个小类放在一起来证明我的问题。
所以从RedState.as我发送自定义事件,女巫将字符串传递给听众。我想听这个事件,并在root类中获取传递的字符串。
如果我在另一个班级听同一个事件,一切似乎都没问题,但是主班没有反应:(:D
package
{
import assets.ButtonController;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main extends Sprite
{
public var nameCollection:Array
public var sManager:SceneManager
public var cText:TempClass
public var bManager:ButtonController;
public var red:RedState
public function Main():void
{
addEventListener(Event.ADDED_TO_STAGE, init);
}
public function init (e:Event):void {
red = new RedState();
addChild(red);
addEventListener(TextDispatcher.SEND_TEXT, red_sendText);
}
public function red_sendText(e:TextDispatcher):void
{ trace ("Something")
trace (e.url)
}
}
}
package
{
import flash.display.Sprite;
public class RedState extends Sprite
{
[Embed(source = "assets/states/red.png")]
public var Red:Class;
public var red:Sprite;
public function RedState()
{
red = new Sprite();
red.addChild(new Red());
addChild(red);
dispatchEvent(new TextDispatcher(TextDispatcher.SEND_TEXT, "I wanna Sing!!"))
}
}
}
答案 0 :(得分:0)
如果我理解正确,您正试图从TextDispatcher.SEND_TEXT
班级发送RedState
。假设一切设置正确,有两个原因可以解释为什么不分派事件。第一个是你没有将监听器添加到RedState
实例。那就是:
public function init (e:Event):void {
red = new RedState();
red.addEventListener(TextDispatcher.SEND_TEXT, red_sendText);
addChild(red);
}
添加它将允许dispatchEvent从RedState
起作用,因为现在RedState
实例将监听它。但是RedState
构造函数还有另一个问题:
public function RedState() {
red = new Sprite();
red.addChild(new Red());
addChild(red);
//trying to dispatch here will not work
dispatchEvent(new TextDispatcher(TextDispatcher.SEND_TEXT, "I wanna Sing!!"))
}
您正在尝试在添加侦听器之前调度事件。目前没有任何具有此事件侦听器的对象,因此它永远不会运行red_sendText()
。
因此你应该做这样的事情:
public function init(e:Event):void {
red = new RedState();
red.addEventListener(TextDispatcher.SEND_TEXT, red_sendText);
red.runText();
addChild(red);
}
然后在你的RedState中:
public function RedState() {
red = new Sprite();
red.addChild(new Red());
addChild(red);
}
public function runText():void {
dispatchEvent(new TextDispatcher(TextDispatcher.SEND_TEXT));
}
现在,在您致电RedState
之前,您的runText()
实例将会收听此事件。