簡體   English   中英

管理Scene2d,libgdx

[英]Managing Scene2d, libgdx

我正在使用libGdx和他們的Scene2d制作一個簡單的點擊游戲。 現在,當我進入一個位置時,我的舞台將被清除,新的演員將被蜂擁而至。 它感覺不正確,效率不高。

我可以在開始時制作所有Actor(背景除外,在進入位置時會加載它們),將它們添加到Stage中並將它們與位置關聯,以便Stage會知道要繪制女巫嗎?

我唯一的想法是在每個演員的繪畫和表演方法中進行檢查,但這意味着循環中要進行大量檢查。 也許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 擴展 ,該擴展提供了scene2d utils類(例如場景導演),以及如果您以后不想重新發明輪子的過渡可能對您有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM