首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管理Scene2d,libgdx

管理Scene2d,libgdx
EN

Stack Overflow用户
提问于 2015-04-17 09:46:12
回答 1查看 410关注 0票数 0

我做了一个简单的点&点击游戏使用libGdx和他们的Scene2d。现在,当我进入一个位置,我的舞台被清除,新演员被附加。感觉不对,效率也不高。

我可以让所有演员在开始(除了背景,我将加载他们进入一个位置),把他们添加到舞台上,并将他们与地点,这样舞台就知道巫婆画?

我唯一的想法是在每个演员的画法和表演方法中检查这一点,但这意味着在一个循环中进行大量的检查。也许Scene2d有什么可以帮我的?或者还有别的方法可以做到?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-17 12:10:16

我唯一的想法是在每个演员的画法和表演方法中检查这一点,但这意味着在一个循环中进行大量的检查。

是的,这将是内在的,最重要的是,一个地狱的维持。

现在,当我进入一个位置,我的舞台被清除,新演员被附加。

这就是您的问题所在,您没有使用scene2D,因为它应该是IMHO。我希望您已经准备好了一个紧张的体系结构&代码重构会话。

当输入位置时,您应该进入阶段。因此,首先,您应该有几个阶段:

代码语言:javascript
复制
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目前没有。因此,您必须自己实现该机制,下面是一个非常基本的示例,可以帮助您获得该机制的要点:

代码语言:javascript
复制
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 ;)
    }

    // ...

}

因此,要更改位置(当前阶段),只需执行以下操作:

代码语言:javascript
复制
MyApp.setStage(new PirateShip())

然后,如果您不想在每次更改位置时重新创建一个新阶段,您可以在某个地方初始化并保留它们的引用,以便您能够像这样更改位置。

代码语言:javascript
复制
MyApp.setStage(some_list_containing_initialized_stage.get(id))

或者,您也可以查看这个libgdx 扩展,它提供了scene2d实用程序类,例如场景指导,以及如果您以后不想重新发明轮子的话,可能对您有用的转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29695796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档