Android自定义事件监听器

我在Android应用程序中使用AndEngine和Box2d。
如何让我的对象“玩家”抛出一个事件并且“GameScene”订阅它?

public class Player { @Override public void Collision(GameObject object) { if(object instanceof Coin) { //throws an event here } } } public class GameScene { private Player player = new Player(); //catch the event here 

}

你应该使用interface s。

创建一个类似于的接口:

 public interface Something { void doSomething(GameObject object); } 

doSomething将被调用的方法(在本例中可以是objectCollision )与接口名称( ObjectCollider (?))相同。

然后让GameScene实现它

 public class GameScene implements Something 

并实施该方法。

在Player类中,为此添加一个侦听器:

 public class Player { private Something listener; 

并在构造函数中请求监听器:

 public Player(Something listener) { this.listener = listener; } 

然后调用它,只需使用

 listener.doSomething(object); 

例:

 public void Collision(GameObject object) { if(object instanceof Coin) { //throws an event here listener.doSomething(object); } } 

要使用此构造函数创建Player对象,您只需执行以下操作:

 Player player = new Player(this); // if you implement the method in the class 

你可以使用android生命周期 。

创建一个信号

 interface IGameSignal{ void gameHandler(); } class GameSignal extends Signal implements IGameSignal{ void gameHandler(){ dispatch(); } } 

要在GameCence或其他任何你想要的地方注册它,可能会有很多同一个Signal听众。

 class GameScene implements IGameSignal{ GameSignal gameSignal = Factory.inject(GameSignal.class); void init() { newsUpdateSignal.addListener(this); } public void gameHandler(){ } } 

并在需要时随时随地发送信号。

 Class A{ GameSignal gameSignal = Factory.inject(GameSignal.class); void execute(){ // dispatch the signal, the callback will be invoked on the same thread gameSignal.gameHandler(); } } 

免责声明:我是android生命周期的作者。