2014-04-05 24 views
1

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

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 

}

回答

7

您应该使用interface秒。

将界面类似:同样的接口名称

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

哪里doSomething是将被调用的方法(在这种情况下可能是objectCollision)(ObjectCollider()?)。

然后让GameScene实现它

public class GameScene implements Something 

和实施方法。

在播放器类,侦听器添加到此:

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 
0

您可以使用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生命周期的作者。