2014-11-30 3 views
1

Я использую встроенную библиотеку UI библиотеки libgdx, чтобы создать пользовательский интерфейс в моей игре. Мне интересно, как я могу нарисовать 2 изображения (или актеров) в таблице один на другой? Я смотрю на подобное, как LayerDrawable в Android. Есть ли какие-нибудь вещи, чтобы это сделать?Libgdx: место 2 актера один на другом

ответ

5

В этих библиотеках библиотеки libGDX есть Stack.

UPDATE: если вы хотите разместить один виджет поверх другого виджета, и эти виджеты имеют разный размер, вы должны обернуть меньший виджет. Что-то вроде:

//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

Это фактический отрывок из моего проекта. Вы должны настроить его для своего дела.

+0

Благодарим вас за anser! Я нашел этот виджет, но кажется, что он просто рисует 2 актера один на другой без какой-либо возможности изменить размер детей. Как я заметил, это изменяет размер всех детей на один максимальный размер одного из детей. Позвольте мне объяснить, что я хочу делать. У меня 2 изображения. Один квадрат, а второй - круг. Квадрат составляет около 80x80 px, а круг - 20x20 пикселей. Я хочу рисовать в правом верхнем углу площади. Как я могу разместить таких актеров в виде виджета Stack? –

+0

Я не знал, что наличие обертки для виджета различного размера в стеке - это то, как он работал! +1 :) Для справки вы можете использовать Контейнер вместо таблицы в качестве обертки –

0

Вы можете использовать нечто подобное:

//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)); 
           } 
          }))); 

Конечно, вы можете привлечь больше, чем изображение: кнопку, текстовую кнопку, ярлык и т. д. или добавьте scrollPane для таблицы, но прежде, чем взглянуть на Skin on libgdx Например, программно девятикратный текстовый текст:

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, он очень прост в использовании.

Смежные вопросы