我正在使用libGdx及其Scene2d简单点&点击游戏。现在,当我进入一个位置时,我的舞台被清除并且新的演员正在附着。它感觉不对,并且效率不高。管理Scene2d,libgdx
我可以在开始时所有参与者,将它们添加到舞台,并将其与关联的位置,所以在舞台就知道巫画(除了背景,我会进入一个位置时加载它们)?
我唯一的想法就是检查每个演员的平局和行为的方法,但是这将意味着在一个循环检查houndreds。也许Scene2d有什么可以帮助我?或者也许有另一种方式来做到这一点?
我正在使用libGdx及其Scene2d简单点&点击游戏。现在,当我进入一个位置时,我的舞台被清除并且新的演员正在附着。它感觉不对,并且效率不高。管理Scene2d,libgdx
我可以在开始时所有参与者,将它们添加到舞台,并将其与关联的位置,所以在舞台就知道巫画(除了背景,我会进入一个位置时加载它们)?
我唯一的想法就是检查每个演员的平局和行为的方法,但是这将意味着在一个循环检查houndreds。也许Scene2d有什么可以帮助我?或者也许有另一种方式来做到这一点?
我唯一的想法是检查在每个演员的绘制和行为方法,但这将意味着在循环中检查的干扰。
是的,这将是无益的,最重要的是,地狱要保持。
现在,当我进入一个位置时,我的舞台被清除并且新的演员正在附着。
这是你的问题所在,你没有使用scene2D,因为它应该是恕我直言。我希望你申请一个强烈的架构&代码重构会议。
当进入新的位置时,您应该输入一个新的阶段。 因此,首先,你应该有以下几个阶段:
class MainMenu extends Stage {
public MainMenu(){
// Add buttons to play or quit the game
}
}
class PointNClickStage extends Stage {
// Add stuff common to all point'n click stages such as an inventory display
}
class Island extends PointNClickStage {
public Island(){
// Add some palm trees and an hidden chest
}
}
class PirateShip extends PointNClickStage {
public PirateShip(){
// Add some pirates and their ship
}
}
... etc
然后在你的应用程序监听器,你应该实现一种方法来改变呈现的当前阶段。从概念上讲,这通常被称为“现场/舞台导演”。一些基于场景的框架,例如Cocos2D提供了他们自己的场景导演,但是libgdx目前不支持。所以,你必须实现自己这个机制,这里是一个非常简单的例子,以帮助你得到它的要点:
public MyApp extends ApplicationAdapter {
private Stage currentStage;
private static MyApp instance;
// ...
@Override
public void create() {
instance = this;
MyApp.setStage(new MainMenu()); // The game begins in the main menu
}
@Override
public void render() {
Gdx.gl.glClearColor(0.15f, 0.1f, 0.15f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
currentStage.act();
currentStage.draw();
}
public static void setStage(Stage stage){
instance.currentStage = stage;
Gdx.input.setInputProcessor(stage); // Important ;)
}
// ...
}
所以,要改变的位置(目前阶段),您将只需要做:
MyApp.setStage(new PirateShip())
然后,如果你不想在每次你改变你的位置的时间来重新创建一个新的阶段,你可以初始化,并保持一个参考他们的地方,这样你就能够改变这样的位置例。
MyApp.setStage(some_list_containing_initialized_stage.get(id))
或者,你也可以看看这个libgdx extension提供scene2d utils的类,如场景导演,和过渡,如果你不想重塑可能对您有用之后轮子。
谢谢。这足以让我走了。我新使用了Scene2d,现在我知道为什么了。再次感谢!!! – gonnog
很高兴帮助:) – Khopa