Android自定义事件监听器

时间:2014-04-05 13:40:46

标签: java andengine

我在Android应用程序中使用AndEngine和Box2d 如何制作我的对象" Player"举办活动和#34; 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

}

2 个答案:

答案 0 :(得分:7)

您应该使用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

答案 1 :(得分:1)

您可以使用android life cycle

创建信号

interface IGameSignal{
    void gameHandler();
}

class GameSignal extends Signal<IGameSignal> 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生命周期的作者。