我做了一个简单的点&点击游戏使用libGdx和他们的Scene2d。现在,当我进入一个位置,我的舞台被清除,新演员被附加。感觉不对,效率也不高。
我可以让所有演员在开始(除了背景,我将加载他们进入一个位置),把他们添加到舞台上,并将他们与地点,这样舞台就知道巫婆画?
我唯一的想法是在每个演员的画法和表演方法中检查这一点,但这意味着在一个循环中进行大量的检查。也许Scene2d有什么可以帮我的?或者还有别的方法可以做到?
发布于 2015-04-17 12:10:16
我唯一的想法是在每个演员的画法和表演方法中检查这一点,但这意味着在一个循环中进行大量的检查。
是的,这将是内在的,最重要的是,一个地狱的维持。
现在,当我进入一个位置,我的舞台被清除,新演员被附加。
这就是您的问题所在,您没有使用scene2D,因为它应该是IMHO。我希望您已经准备好了一个紧张的体系结构&代码重构会话。
当输入新位置时,您应该进入新阶段。因此,首先,您应该有几个阶段:
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 扩展,它提供了scene2d实用程序类,例如场景指导,以及如果您以后不想重新发明轮子的话,可能对您有用的转换。
https://stackoverflow.com/questions/29695796
复制相似问题