我在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
}
答案 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生命周期的作者。