加载JSON级别时,游戏有一个初始的混蛋 - LibGdx

时间:2017-07-18 05:21:27

标签: libgdx

我的游戏中有大约25个关卡,当前一个关闭完成后,每个关卡都会自动加载。 当我点击播放按钮开始游戏时,游戏画面会遇到来自JSON的障碍物。但是当游戏刚刚开始玩时,最初会发生一个混蛋。

这是我的课程,我正在为级别进行JSON解析:

public class ObstacleFactory {

    public static Array<Obstacle> obstacles1 = new Array<Obstacle>();
    public static Array<String> names = new Array<String>();

    public ObstacleFactory() {
    }

    public static void loadJsonLevels(String fileName) {
        JsonValue jsonValue = new JsonReader().parse(Gdx.files.internal(fileName));
        JsonValue nameValue = jsonValue.get("obstacles");
        for (JsonValue value : nameValue.iterator()) {

            System.out.println(nameValue);

            if (value.getString("name").equals("rock")) {
                obstacles1.add(new Obstacle());
                obstacles1.get(obstacles1.size - 1).setName(value.getString("name"));
                obstacles1.get(obstacles1.size - 1).setDistance(value.getFloat("distance"));
                obstacles1.get(obstacles1.size - 1).setPos(value.getString("position"));
                obstacles1.get(obstacles1.size - 1).setSpeed(value.getFloat("speed"));
                if (value.getString("position").equals("middle"))
                    obstacles1.get(obstacles1.size - 1).setPosition(value.getFloat("distance"), Constants.BIG_ROCK_Y);
                obstacles1.get(obstacles1.size - 1).setSize(Constants.ROCK_WIDTH, Constants.ROCK_HEIGHT);

                names.add(value.getString("name"));
            }
            if (value.getString("name").equals("gorilla")) {
                obstacles1.add(new Obstacle());
                obstacles1.get(obstacles1.size - 1).setName(value.getString("name"));
                obstacles1.get(obstacles1.size - 1).setDistance(value.getFloat("distance"));
                obstacles1.get(obstacles1.size - 1).setPos(value.getString("position"));
                obstacles1.get(obstacles1.size - 1).setSpeed(value.getFloat("speed"));
                if (value.getString("position").equals("middle"))
                    obstacles1.get(obstacles1.size - 1).setPosition(value.getFloat("distance"), Constants.GORILLA_Y);
                obstacles1.get(obstacles1.size - 1).setSize(Constants.GORILLA_WIDTH, Constants.GORILLA_HEIGHT);

                names.add(value.getString("name"));

            }
     //   ------------other obstacles
      //  -------------other obstacles

                names.add(value.getString("name"));
            }
        }
      }
     }

这个loadJsonLevels()我在GameScreen类中调用(我在这里编写所有的gamelogic,并为JSON和其他游戏对象的障碍物加载纹理。)这样的构造函数:

ObstacleFactory.loadJsonLevels("levels/level1.json");
ObstacleFactory.loadJsonLevels("levels/level2.json");

每次我开始或重新开始游戏时,这个混蛋就在那里,应该被移除,因为它很烦人。

这个问题的可能原因是什么?

我发布了与json解析和级别加载相关的代码,因为当我调用这个loadJsonLevel()时会发生这种混蛋。如果我发表评论,那么jerk就不存在了。

我希望我能够得到一些有用的建议来解决这个问题。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可能在数据完全加载之前开始显示屏幕。

打开,读取和写入文件或网络是一项非常昂贵的操作(或者可能是,特别是在低资源设备上)。 您不希望在主显示主题中执行此操作,并且在绘制屏幕时您不想这样做。 切割场景或其他东西的充分理由让用户等待几秒钟。