我正在创建一个简单的点击游戏,在屏幕上产生敌人,当用户点击他们,他们得到点,敌人被摧毁。我这样做时,使图像盒可见和不可见时,用户单击他们。它们以计时器运行,并有一个不断的产卵循环。
目前,我想实现一种方式,用户将开始松散的健康。所以我想检查一下敌人的影像盒是否可见,如果是的话,玩家会慢慢失去健康。
我对创建一个可以刷新此作业的UI的计时器任务感到困惑。我希望能够不断检查用户界面,如果一些图像是可见的或不可见的。我已经开始从我自己的研究,但游戏崩溃时,加载,如果这是实现。
刷新UI的计时器:
private Timer mTimer1;
private TimerTask mTt1;
private Handler mTimerHandler = new Handler();
public void onStart() {
mTimer1 = new Timer();
mTt1 = new TimerTask() {
public void run() {
mTimerHandler.post(new Runnable() {
public void run() {
//TODO
final TextView health = (TextView) findViewById(R.id.Health);
health.setText("Health: " + health2);
//Enemy ImageViews
final ImageView enemy1 = (ImageView) findViewById(R.id.enemy1);
final ImageView enemy2 = (ImageView) findViewById(R.id.enemy2);
final ImageView enemy3 = (ImageView) findViewById(R.id.enemy3);
final ImageView enemy4 = (ImageView) findViewById(R.id.enemy4);
//sets imageViews into array
final ImageView[] enemies = new ImageView[4];
enemies[0] = enemy1;
enemies[1] = enemy2;
enemies[2] = enemy3;
enemies[3] = enemy4;
boolean running = true;
while (running) {
if (enemy1.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
if (enemy2.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
if (enemy3.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
if (enemy4.getVisibility() == View.VISIBLE) {
int damage = 1;
health2 = health2 - damage;
health.setText("Health:" + health2);
} else {
// Either gone or invisible
}
}
}
});
}
};
mTimer1.schedule(mTt1, 1, 5000);
}
}这是我创建的计时器任务。我想弄清楚为什么这会使我的游戏崩溃,以及如何解决这个问题。我以前从来没有用过这样的计时器,所以如果问题很明显,那就是为什么我没有注意到它。
我在onCreate方法中有更多的代码,如果需要的话可以发布。感谢你对这个初学者的所有帮助和建议。
坠机:

发布于 2017-04-01 14:26:31
根据需要调用super.onStart()的错误消息,您需要在这里添加以下内容:
公开无效onStart() {
super.onStart();
//您的代码
}
我想你知道,但万一超级是你扩展的类,家长。如果重写它是onStart函数,则一般的onStart过程不会完成,如果您不调用超级函数。
编辑:至于你的另一个问题,我(作为java的初学者,所以我并不认为这是最好的方法)会按照这样的思路思考:
首先,创建一个处理程序并为敌人创建运行程序:
Handler handler = new Handler();
Runnable[] eRunnables = new Runnable[enemies.length-1];
for(int i = 0; i < eRunnables.length; i++){
eRunnables[i] = new Runnable(){
public void run(){
if(enemies[i].getVisibility() == View.VISIBLE){
health2--;
health.setText("Health:" + health2);
handler.postDelayed(eRunnables[i], 1000);
}
}
};
}然后,在最初使敌人可见的地方(除了将它们设置为可见的),执行以下操作
handler.postDelayed(eRunnableenemyNr,1000);
当然,用您想要的多少毫秒都可以替换1000。
再说一次,我不是说这是最好的方法,这是我想出来的。
https://stackoverflow.com/questions/43157826
复制相似问题