I try to change boolean value outside class using method from this class. But my problem is that i can't make my boolean value change in update method.
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));
}
}
The output after calling method setRemoveSnake(true) is:
[value: ] true
[this.value: ] true
[value inside update : ] false
I use libGDX and Box2D in my game if this is necessary.
Edit. I tried to delete snake insade main game update method but program can't access second for loop in this code:
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);
}
Here is output: (before killing enemy snake)
[work insade enemy for loop] 1356724055
and after:
[work outside for loops: ] 1356724055
Ok so i finally find an answer. That was my ContactListener before i edited my post:
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;
And because i removed Snake from creator.getEnemies() list, my update method:
for(int i = 0; i < creator.getEnemies().size; i++) {
Snake enemy = creator.getEnemies().get(i);
enemy.update(dt);
}
didn't work and i simply couldn't remove Snake because Snake was removed from list and program didn't go thru enemy.update(dt).