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生命周期的作者。