[英]Handler postDelay works only once
I'm trying to change delay of handler in handler.postDelay()
but here it works only once then it stops.我正在尝试在
handler.postDelay()
更改处理程序的延迟,但在这里它只工作一次然后停止。 The crucial method is in the end.关键的方法在最后。 I'm thinking how I can make the runnable work in loop of postDelay().
我在想如何在 postDelay() 循环中使可运行的工作。
class MyGestureListener implements GestureDetector.OnGestureListener {
@Override
public boolean onSingleTapUp(MotionEvent e) {
column = (int) (e.getX() / cellWidth);
row = (int) (e.getY() / cellHeight);
selectedNode = (6 * row) + column;
if (selectedNode == enemyNode && !atak && GameMovingObject.ableToAttack(chibiAlive, enemyAlive, chibiNode, enemyNode)) {
if (attackOption) {
chibi1.attack(enemies.get(enemyId));
//attackOption=false;
atak = true;
if (!enemyAlive) {
enemyId = enemyId + 1;
enemies.add(new Enemy(enemyId, GameSurface.this, wolf, Enemy.genPosition(getWidth(), getHeight())[0], Enemy.genPosition(getWidth(), getHeight())[1], cellWidth, cellHeight));
enemyAlive = true;
}
}
}
// ...
return true;
}
}
relevant methods相关方法
public static boolean ableToAttack(boolean chibiAlive, boolean enemyAlive, int chibiNode, int enemyNode) {
if(!chibiAlive || !enemyAlive)
return false;
boolean able = false;
if (chibiNode > enemyNode)
if (chibiNode - enemyNode == 1 || chibiNode - enemyNode == 5 || chibiNode - enemyNode == 6 || chibiNode - enemyNode == 7)
able = true;
if (enemyNode > chibiNode)
able = enemyNode - chibiNode == 1 || enemyNode - chibiNode == 5 || enemyNode - chibiNode == 6 || enemyNode - chibiNode == 7;
return able;
}
and和
public void attack(Enemy enemy) {
if (partOfBody.equals("legs"))
enemy.getLegsDamage(generateDamage());
if (enemy.hp <= 0) {
enemy.hp = 0;
gs.attackOption = false;
gs.setEnemyAlive(false);
addExperience();
dbHelper.setExp("1", exp);
// ...
}
}
and finally最后
public void getLegsDamage(int legsDamage) {
fullLegsDamage = fullLegsDamage + legsDamage;
hp = hp - legsDamage;
if(fullLegsDamage>50) {
legsDamaged=2;
handler2.removeCallbacksAndMessages(null);
handler2.postDelayed(runnable, 4000);
}
}
runnable looks like this runnable 看起来像这样
runnable = new Runnable() {
@Override
public void run() {
hit=true;
//gs.canvas.drawBitmap(bitmap,200,200, null);
cc.setHp(cc.getHp() - generateDamage());
if(cc.getHp() <= 0) {
cc.setHp(0);
gs.setChibiAlive(false);
}
((Gra)gs.getContext()).updateChibiHpMp(cc);
}
};
I've been thinking about this for whole day up until now.直到现在,我一整天都在思考这个问题。 Help me please.
请帮帮我。
Not completely sure what you are asking for but I interpret the question as you want the Runnable
to run every 4s and in that case the Runnable
needs to post it self at before it's done, like this:不完全确定您要的是什么,但我将问题解释为您希望
Runnable
每 4 秒运行一次,在这种情况下, Runnable
需要在完成之前自行发布,如下所示:
runnable = new Runnable() {
@Override
public void run() {
hit=true;
//gs.canvas.drawBitmap(bitmap,200,200, null);
cc.setHp(cc.getHp() - generateDamage());
if(cc.getHp() <= 0) {
cc.setHp(0);
gs.setChibiAlive(false);
}
((Gra)gs.getContext()).updateChibiHpMp(cc);
// Schedule the runnable again
handler2.postDelayed(this, 4000)
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.