我不不为我正在创建的涉及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 级别的任何提示?>
如果需要,我可以发布游戏开始的代码,它只占用很多行。
答案 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时,它将正确更新。我不确定我是否正确解释了它,但它确实起作用并且在我的脑海中很有意义:)