我正在尝试在我的android whack-a-mole游戏中创建一个MVC模式。
我通过内部类线程在模型中生成mole位置,并希望最终将它传递给视图,以便为它生成一个sprite。
如何为我的视图创建一种方法,以便从我的模型中连续接收生成的痣位置?
我已经编辑了下面的代码,以捕捉它们背后的基本要素。
模特:
public class GameModel{
public GameModel(){
spawner = new MoleSpawner();
spawner.start();
}
.
.
.
private class MoleSpawner extends Thread{
private int location;
public void run() {
location = new Random().nextInt(20);
try{
sleep (1000);
} catch (InterruptedException ex){
ex.printStackTrace();
}
}
}
}
查看:
public GameView{
.
.
.
public void createMoleSprite(int newlocation){
//create sprites here
//newlocation should come from the MODEL
//this method must be triggered everytime the MODEL creates a new location
}
}
答案 0 :(得分:1)
实现此目的的一种方法是使用处理程序。
它可能更复杂,但我会举一个关于如何实现它的简单示例。
在运行游戏的Activity中,使用
获取Handler的HandlerHandler mHandler = new Handler();
然后,在实例化模型时,将mHandler对象以及对活动的引用传递给它。在你的模型中,每当你需要产生一个新的痣时,做
mHandler.post(new Runnable() {
gameActivity.spawnNewMoleAt(location);
});
这可能变得更加复杂,尤其是如果您控制动态生成痣的速率,但您可以在此基础上进行构建。
您可以找到关于处理程序HERE的好教程。