首页 > 解决方案 > 布尔值不会改变 insade 类 java

问题描述

我尝试使用此类中的方法更改类外的布尔值。但我的问题是我不能在更新方法中改变我的布尔值。


    public class Snake extends Sprite {
    
        protected boolean removeSnake;
    
        public Snake() {
            removeSnake = false;
    }
    
    public void update(float dt) {
    Gdx.app.log("value inside update : ", String.valueOf(removeSnake));
            if(removeSnake) {
                do something...
            }
    }
    
    public void setRemoveSnake(boolean removeSnake) {
    
            this.removeSnake = removeSnake;
            Gdx.app.log("value: ", String.valueOf(removeSnake));
            Gdx.app.log("this.value: ", String.valueOf(this.removeSnake));
        }
    }

调用方法 setRemoveSnake(true) 后的输出是:

[value: ] true
[this.value: ] true
[value inside update : ] false

如果有必要,我会在我的游戏中使用 libGDX 和 Box2D。

编辑。我试图删除蛇插入主游戏更新方法,但程序无法访问此代码中的第二个 for 循环:


           for(Integer hashCode : creator.getDeadEnemiesList()) {
                Gdx.app.log("work outside for loops: ", String.valueOf(hashCode));
            }
    
            for(Snake enemy : creator.getEnemies()) {
                Gdx.app.log("work insade enemy for loop", "");
                for(int i = 0; i < creator.getDeadEnemiesList().size(); i++) {
                    Integer hashCode = Integer.valueOf(creator.getDeadEnemiesList().get(i));
                    Gdx.app.log("work insade hashCode for loop", "");
                    Gdx.app.log("list hascode: ", String.valueOf(hashCode));
                    Gdx.app.log("enemy hascode: ", String.valueOf(System.identityHashCode(enemy)));
                    if (hashCode.equals(Integer.valueOf(System.identityHashCode(enemy)))) {
                        for (SnakeTail tailPart : enemy.getTailArray()) {
                            world.destroyBody(tailPart.b2body);
                        }
                        world.destroyBody(enemy.getB2body());
                    }
                }
                enemy.update(dt);
            }

这是输出:(在杀死敌人蛇之前)

[work insade enemy for loop] 1356724055

之后:

[work outside for loops: ] 1356724055

标签: javaandroid-studiolibgdxbox2d

解决方案


好的,所以我终于找到了答案。在我编辑帖子之前,那是我的 ContactListener:

case BetterSnake.ENEMY_BIT | BetterSnake.PLAYER_TAIL_BIT:
                if(fixA.getFilterData().categoryBits == BetterSnake.ENEMY_BIT) {
                    for(int i = 0; i < creator.getEnemies().size; i++) {

                        if(creator.getEnemies().get(i).equals( fixA.getUserData())) {
                            creator.getEnemies().removeIndex(i);
                        }
                    }
                    ((Snake) fixA.getUserData()).setRemoveSnake(true);
                    
                }else {
                    for(int i = 0; i < creator.getEnemies().size; i++) {

                        if(creator.getEnemies().get(i).equals( fixB.getUserData())) {
                            creator.getEnemies().removeIndex(i);
                        }
                    }
                    ((Snake) fixB.getUserData()).setRemoveSnake(true);
                    
                }
                break;

因为我从 creator.getEnemies() 列表中删除了 Snake,所以我的更新方法:


    for(int i = 0; i < creator.getEnemies().size; i++) {
                Snake enemy = creator.getEnemies().get(i);
                enemy.update(dt);
            }

没用,我根本无法删除 Snake,因为 Snake 已从列表中删除,并且程序没有通过enemy.update(dt)。


推荐阅读