【问题标题】:AddListener to a specific position of an actor in LibGdx Scene2dAddListener 到 LibGdx Scene2d 中演员的特定位置
【发布时间】:2017-12-31 13:01:59
【问题描述】:

我有这个演员 HintsWindow 包含 3 个纹理区域(背景、取消、继续)。

public class HintsWindow extends Actor {

    TextureRegion bg;
    TextureRegion cancel;
    TextureRegion proceed;

    public HintsWindow() {
        bg = new TextureRegion(Gdx.files.internal("background.png"));
        cancel = new TextureRegion(Gdx.files.internal("cancel.png"));
        proceed = new TextureRegion(Gdx.files.internal("proceed.png"));
     }

    @Override
    public void draw(Batch batch, float parentAlpha) {
        Color color = getColor();
        batch.setColor(color.r, color.g, color.b, color.a * parentAlpha);
        batch.draw(bg, 171.031f, 484.090f);
        batch.draw(cancel, 234.837f, 542.926f);
        batch.draw(proceed, 407.900f, 542.926f);
    }
}

绘图 TextureRegions 工作正常,但这是我的问题:

是否可以不将Listener 添加到整个actor,而是取消并继续,以便它们像按钮一样起作用?

类似的东西:

addListener(new ClickListener() {
    @Override
    public void clicked(InputEvent event, float x, float y) {
        // if proceed pressed --> do something
        // else if cancel pressed --> addAction(Actions.fadeOut(1.0f));
    }
});

【问题讨论】:

    标签: libgdx scene2d


    【解决方案1】:

    您可以让您的HintsWindow 包含Actor 而不是TextureRegions。 将它们更改为图像。

        public class HintsWindow extends Actor {
    
        Image bg;
        Image cancel;
        Image proceed;
    
        public HintsWindow() {
            bg = new Image(new TextureRegion(Gdx.files.internal("background.png")));
            cancel = new Image(new TextureRegion(Gdx.files.internal("cancel.png")));
            proceed = new Image(new TextureRegion(Gdx.files.internal("proceed.png")));
    
            // here you can add listener
            cancel.addListener(new ClickListener() {
               @Override
               public void clicked(InputEvent event, float x, float y) {
                 // if proceed pressed --> do something
                 // else if cancel pressed --> addAction(Actions.fadeOut(1.0f));
        }
    });
         }
    
        @Override
        public void draw(Batch batch, float parentAlpha) {
            Color color = getColor();
            color.set(color.r, color.g, color.b, color.a * parentAlpha);
            bg.setColor(color);
            cancel.setColor(color);
            proceed.setColor(color);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 2016-05-28
      • 2013-08-06
      • 1970-01-01
      • 2013-10-04
      相关资源
      最近更新 更多