在 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 开始,然后每次关卡被打败并按下回车键时,它都会正确更新。我不确定我是否解释正确,但它确实有效并且在我的脑海中有意义:)
我不在我正在创建的涉及 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 开始,然后每次关卡被打败并按下回车键时,它都会正确更新。我不确定我是否解释正确,但它确实有效并且在我的脑海中有意义:)