Handler postDelay仅工作一次

问题描述 投票:0回答:1

我正在尝试更改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()中处理程序的延迟,但是在这里它仅工作一次,然后停止。关键的方法是最后。我在想如何使可运行的工作在...

java android
1个回答
1
投票

[不太清楚您要问的是什么,但是我想解释这个问题,因为您希望Runnable每4s运行一次,在这种情况下Runnable需要在完成之前自行发布,就像这样:

© www.soinside.com 2019 - 2024. All rights reserved.