簡體   English   中英

Libgdx:將2位演員彼此放置

[英]Libgdx: place 2 actors one on another

我使用libgdx的scene2d內置UI庫在游戲中創建UI。 我很有趣如何在一張桌子上一張一張地畫兩張圖像(或演員)? 我正在尋找類似Android中的LayerDrawable之類的東西。 是否有任何可以制造的東西?

這些目的在libGDX UI庫中有一個Stack小部件。

更新 :如果要將一個窗口小部件放置在另一個窗口小部件上,並且這些窗口小部件的大小不同,則應包裝較小的窗口小部件。 就像是:

//First add actual content
stack.add(content);

//Second add wrapped overlay object
Table overlay = new Table();
overlay.add(overlayWidget).expand().fillX().bottom().left();
stack.add(overlay);

stack變量是一個Stack實例

這是我項目的實際摘錄。 您應該針對自己的情況進行調整。

您可以使用類似這樣的東西:

    //create stage
    stage = new Stage(new StretchViewport(game.width, game.height));

    //create table
    Table table = new Table();
    table.setSize(game.width,game.height); //fullscreen

    //add Image 1
    table.add(new Image(game.skin.getDrawable("image1")));
    //add Image 2 (create new col)
    table.add(new Image(game.skin.getDrawable("image2"))).width(xx).height(xx);

    //add new row
    table.row();

    //add Image 3 - padding to draw over image1/2 && colspan
    table.add(new Image(game.skin.getDrawable("image3"))).width(xx).height(xx).padTop(-50f).colspan(2);

    //add table to stage
    stage.addActor(table);

    /*
     * Add action
     *
     */

    @Override
    public void render(float delta) {
        ...
        //don't forget to draw ur stage
        stage.act(delta); // or stage.act(Gdx.graphics.getDeltaTime())
        stage.draw();
    }

您也可以向舞台/桌子或圖像等添加動作...:

   stage.addAction(Actions.sequence(
                           Actions.fadeOut(0.0001f),
                           Actions.fadeIn(0.5f),
                           Actions.delay(0.1f), 
                           Actions.run(new Runnable() {
                               @Override
                               public void run() {
                                   //mmmm new screen 
                                   dispose();
                                   game.setScreen(new BoobsScreen(game));
                               }
                           })));

當然,您不僅可以繪制圖像:按鈕,文本按鈕,標簽等,還可以為Table添加scrollPane,但在查看libgdx上的Skin之前,例如以編程方式ninepatch textbutton:

   private NinePatch processNinePatchFile(String fname) {
        final Texture t = new Texture(Gdx.files.internal(fname));
        final int width = t.getWidth() - 2;
        final int height = t.getHeight() - 2;
        return new NinePatch(new TextureRegion(t, 1, 1, width, height), 3, 3, 3, 3);
    }

    //create skin
    skin = new Skin();
    ...
    //create font
    ...
    //create ninepatch button from android/assets/style/button
    NinePatch ninepatch = processNinePatchFile("style/button.9.png");
    skin.add("button.9", ninepatch);

    //create textbuttonstyle
    TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
    textButtonStyle.font = skin.getFont("font_black_38");
    textButtonStyle.fontColor = Color.DARK_GRAY;
    textButtonStyle.up = skin.getDrawable("button.9");
    skin.add("buttonTextStyle", textButtonStyle);


    //now you can create textbutton
    TextButton btn = new TextButton("Hello", game.skin.get("buttonTextStyle", TextButton.TextButtonStyle.class));

    //add a clicklistener
    btn.addListener(new ClickListener(){
        @Override
        public void clicked(InputEvent event, float x, float y) {
            //mmmmmm add action for exemple
            stage.addAction(Actions.sequence(Actions.fadeOut(0.5f), Actions.run(new Runnable() {
                @Override
                public void run() {
                    //dispose and load screen
                    dispose();
                    game.setScreen(new MoreBoobsScreen(game));
                }
            })));
        }
    });
    table.add(btn);

要創建bitmapfont,請查看Gdx freetype ,它非常易於使用。

暫無
暫無

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

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