我构建了一个包含在世界之间移动的游戏。程序的主类假设从呈现第一个世界(world1,它是firstWorldClass的一个实例)开始。它应该停留在这个世界中,直到类world1中的一个变量发生变化(由world1.getMoveWorldIndicator()检查)。然后,它应该移动到下一个世界-删除world1,构建world2并将其添加到图形视图中。从第二世界到第三世界也是如此。当我在两个世界之间做这件事时(删除添加(world2)后的所有代码),或者如果我只保留第二个世界和第三个世界之间的转换,它会很好地工作。当我把两者都放在一行时,它就停止工作了(当添加第二个while循环时)。我的代码:
public class GameManager extends Program implements GameContstants{
public void init() {
world1=new firstWorldClass();
add(world1);
while(!world1.getMoveWorldIndicator()){
pause(200);
if(world1.getMoveWorldIndicator())break;
}
remove(world1);
world1=null;
world2=new secondWorldClass();
add(world2);
pause(200);
while(! world2.getMoveWorldIndicator()){
pause(200);
if(world2.getMoveWorldIndicator()) break;
}
remove(world2);
world2=null;
world3=new thirdWorldClass();
add(world3);
}
private firstWorldClass world1;
private secondWorldClass world2;
private thirdWorldClass world3;
}
我怀疑while循环之间存在某种交互或内存问题,但我愿意听到任何想法/不同的方法。
谢谢!
我认为这里有很多因素在起作用:
- 清理您的代码。保留一些编码规则对于修复错误非常重要
- 不要重复使用代码。提取到方法或类
- 保持类命名约定=>类的大写字母
- 不要将变量设置为null。通常编译器会在优化时为您执行此操作。如果您仍然想手动释放空间或变量名,则应该在代码周围使用范围括号{}
- 分解你的代码,我们会看到很多冗余,比如"getMoveWorldIndicator()"每个循环检查两次,与只使用一次没有任何不同的效果
我在这里提供了一个更干净但不同的版本,给你看。
但为了真正帮助您处理代码,我们确实需要更多的代码来深入了解问题。
public class GameManager /* extends ... */{
static class WorldBase {
public boolean getMoveWorldIndicator() {
return false;
}
}
static class FirstWorld extends WorldBase {}
static class SecondWorld extends WorldBase {}
static class ThirdWorld extends WorldBase {}
public void init() {
playWorld(new FirstWorld());
playWorld(new SecondWorld());
playWorld(new ThirdWorld());
}
private void playWorld(final WorldBase pWorld) {
add(pWorld);
while (!pWorld.getMoveWorldIndicator()) {
pause(200);
}
remove(pWorld);
}
private void remove(final WorldBase pWorld1) {}
private void pause(final int pI) {}
private void add(final WorldBase pWorld1) {}
}