我正在尝试更改handler.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;
}
}
相关方法
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;
}
和
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);
// ...
}
}
最后]
public void getLegsDamage(int legsDamage) { fullLegsDamage = fullLegsDamage + legsDamage; hp = hp - legsDamage; if(fullLegsDamage>50) { legsDamaged=2; handler2.removeCallbacksAndMessages(null); handler2.postDelayed(runnable, 4000); } }
可运行的样子
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); } };
到目前为止,我一直都在考虑这一点。请帮助我。
我正在尝试更改handler.postDelay()中处理程序的延迟,但是在这里它仅工作一次,然后停止。关键的方法是最后。我在想如何使可运行的工作在...
[不太清楚您要问的是什么,但是我想解释这个问题,因为您希望Runnable
每4s运行一次,在这种情况下Runnable
需要在完成之前自行发布,就像这样: