在 LibGDX 没有平铺地图的 Box2D 中创建一个新关卡

Create a New Level in LibGDX Box2D Without Tiled Maps

在我正在创建的涉及 Box2D 的游戏中使用平铺地图。当我 运行 以下代码时,我在创建新关卡时遇到问题:

// Scenario in which a win becomes true
if(ballFollower.overlapping(hole, true))
    {
        win = true;
        ballFollower.remove();
        ball.remove();
        currentLevel += 1;
        previousLevel = currentLevel - 1;
        Action fadeIn = Actions.sequence(Actions.alpha(0), Actions.show(), Actions.fadeIn(2),
                Actions.forever(Actions.sequence(Actions.color(new Color(1, 0, 0, 1), 1),
                        Actions.color(new Color(0, 0, 1, 1), 1))));
        winText.addAction(fadeIn);
        System.out.println(currentLevel);
    }

// If won, give an option to move onto the next level.
    if(win)
    {
        nextLevelLabel.setVisible(true);
        if(Gdx.input.isKeyPressed(Keys.ENTER))
        {
            // currentLevel increments by 1 once the level is won.
            game.setScreen(new ElevatorLevel(game, currentLevel));
        }
    }

在我的构造函数中,

private int previousLevel = 0;
private int currentLevel = 1;
public ElevatorLevel(Game g, int level)
{  
    super(g, level);  
    currentLevel = level;
}

我在参数中使用变量 level 以便在使用 setScreen() 方法重新启动当前关卡时或更上一层楼,它知道去哪一层 to/create 因为它将是当前层级。但是,我还没有让它正常运行,因为每当我在游戏获胜后按回车键时,它都会将我送回相同的起始级别。关于如何创建包含 SAME[的 NEW 关卡的任何提示=28=] 对象作为我的起始级别?

如果需要,我可以post游戏开始的代码,它只是占用了很多行。

原来我逻辑错了。我有一个全局变量,

private int mapHeight;

我在创建方法中将其设置为 750。问题是我在下面的创建方法中根据 currentLevel 更新它。这导致它要么崩溃,要么世界高度总是一团糟,因为 mapHeight 永远没有意义。 我所做的不是将它放在 create 方法中,而是将其保留为 750 并将其放在我的 update(float dt) 方法中:

public void create() 
{   
    mapHeight = 750;
    // rest of code below etc
}
public void update(float dt)
{
   // Now, update mapHeight according to values in constructor.
   mapHeight = currentLevel * 750;
   // rest of code below etc
}

自从我这样做以来,地图最初会从 750 开始,然后每次关卡被打败并按下回车键时,它都会正确更新。我不确定我是否解释正确,但它确实有效并且在我的脑海中有意义:)