这是我的自定义事件类:
package{
import flash.events.Event;
public class PetEvent extends Event{
public static const ON_CRASH:String = "onCrash";
public function PetEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false):void{
super(type, bubbles, cancelable);
}
override public function clone():Event {
return new PetEvent(type, bubbles, cancelable);
}
}
}
这是我的游戏处理程序。我创建了一个冲浪类的新实例,我想听听它。
package {
import flash.display.MovieClip;
import flash.events.Event;
public class GameHandler extends MovieClip {
public var newGame:Surf;
public function GameHandler() {
newGame = new Surf();
newGame.addEventListener(PetEvent.ON_CRASH, onCrash);
addChild(newGame);
}
public function onCrash(petEvent:PetEvent):void{
trace("MPAM");
var gameOver:GameOver = new GameOver(stage.stageWidth, stage.stageHeight);
addChild(gameOver);
newGame = null;
}
}
}
来自Surf课程的相关专栏:
public function startSurfing(timerEvent:TimerEvent):void
{
moveCatandDog();
for each ( var boat:Boat in armada)
{
boat.moveBoat(boatSpeed);
if ( cat.hitTestObject(boat) || dog.hitTestObject(boat) )
{
dispatchEvent( new PetEvent(PetEvent.ON_CRASH) );
gameTimer.stop();
}
}
}
因此,当Surf检测到崩溃时,我希望它将事件发送到GameHandler,而GameHandler将创建一个GameOver实例。
我已经尝试了一切,我甚至没有得到任何痕迹。我通常不会问问题,但这是针对一个单项目而且我的时间已经不多了。我真的很感激任何反馈。谢谢!
答案 0 :(得分:0)
问题解决了!
我必须将我的Document Class更改为GameHandler并创建stage的公共静态变量。
之前我将Surf作为我的文档类,因为我将一些键盘监听器设置为舞台。
所以PetEvent和Surf的发送是正确的。我改变了GameHandler,如下所示,我在StackOverflow中找到了另一种解决方案。
在GameHandler的构造函数中,如果阶段准备就绪(非null),它将它设置为公共静态变量STAGE(通过init函数),否则它会添加一个监听器,当阶段准备就绪时它会做同样的事情并删除监听器。
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
public class GameHandler extends MovieClip {
public var newGame:Surf;
public static var STAGE:Stage;
public function GameHandler() {
if (stage){
init();
} else {
addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
}
newGame = new Surf();
newGame.addEventListener(PetEvent.ON_CRASH, onCrash);
addChild(newGame);
}
private function init(e:Event=null):void{
removeEventListener(Event.ADDED_TO_STAGE, init);
// store stage reference when stage ready
STAGE=stage;
}
public function onCrash(petEvent:PetEvent):void{
var gameOver:GameOver = new GameOver(stage.stageWidth, stage.stageHeight);
addChild(gameOver);
newGame = null;
}
}
}
我将GameHandler导入Surf:
import GameHandler;
所以我可以将Surf中的监听器设置为GameHandler.STAGE.addEventListener(...)
感谢大家的建议!