在没有平铺地图的LibGDX Box2D中创建新级别

时间:2019-01-20 18:22:04

标签: java libgdx box2d

不为我正在创建的涉及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()方法将当前级别或更高级别重新启动到下一级别时,它将知道要去/创建哪个,因为它将是currentLevel。但是,我没有使它正常运行,因为一旦赢得比赛,每当我按Enter键,它就会使我回到相同的起始水平。关于如何创建包含 SAME 对象作为我的初始级别的 NEW 级别的任何提示?

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

1 个答案:

答案 0 :(得分:0)

结果证明我的逻辑有误。我有一个全局变量,

private int mapHeight;

我在create方法中将其设置为750。问题是我正在根据下面的create方法中的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开始,然后每次敲打关卡并按Enter时,它将正确更新。我不确定我是否正确解释了它,但它确实起作用并且在我的脑海中很有意义:)