java - 布尔值不会改变 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
解决方案
好的,所以我终于找到了答案。在我编辑帖子之前,那是我的 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)。
推荐阅读
- arrays - 如何通过R中数组中N个元素的索引计算平均值
- angular - NO_ERRORS_SCHEMA 停止以角度工作的 Karma 测试
- authentication - Active Directory .Net Core Web API 认证 JWT
- postgresql - PostgreSQL:无法连接到服务器:端口 5432 上的 TCP/IP 连接
- python - Django NameError:请求未在基于类的视图中定义
- javascript - 嵌入缩略图 Youtube 视频
- javascript - 有没有办法从 ArrayBuffer 中创建 TypedArray 而无需在 Javascript 中使用 new 关键字?
- function - 将函数映射到 Julia 中的稀疏矩阵数组
- google-api - 您可以将 Google Photo API 与 Google 选择器一起使用吗?
- javascript - 如何设置元素的高度以匹配缩放 div 的偏移速度?