libgdx - 图像setDrawable无法正常工作

时间:2015-03-21 09:13:24

标签: java libgdx

在运行时更改Actor(图像子类)纹理不起作用。 仅绘制构造函数调用的纹理参数。我找了 解决方案,但没有任何工作。最后一次尝试是在查找代码 图像构造函数,最终只设置Drawable然后调用 的setSize()。

CircuitElement扩展了Image

public class Bulb extends CircuitElement {
    boolean on;
    int x, y;

    TextureRegion bulbOn;
    TextureRegion bulbOff;

    public Bulb (int x, int y, int id, TextureRegion i) {
        super(i);

        on = false;
        //this.x = x;
        //this.y = y;
        this.id = id;

        TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("switch.pack"));
        bulbOn = atlas.findRegion("bulbOn");
        bulbOff = atlas.findRegion("bulbOff");
        setWidth(bulbOn.getRegionWidth());
        setHeight(bulbOn.getRegionHeight());
        setBounds(0, 0, getWidth(), getHeight());
        debug();

        this.addListener(new ClickListener() {
            public void clicked(InputEvent event, float x, float y) {
                if (on) {
                    on = false;
                } else {
                    on = true;
                }
                System.out.println(on);
            }
        });
    }

    @Override
    public void draw (Batch batch, float parentAlpha) {
        if (on) {
            setDrawable(new SpriteDrawable(new Sprite(bulbOn)));
            //setWidth(bulbOn.getRegionWidth());
            //setHeight(bulbOn.getRegionHeight());
            //setBounds(0, 0, getWidth(), getHeight());
            setSize(getPrefWidth(), getPrefHeight());
        } else {
            setDrawable(new SpriteDrawable(new Sprite(bulbOff)));
            //setWidth(bulbOff.getRegionWidth());
            //setHeight(bulbOff.getRegionHeight());
            //setBounds(0, 0, getWidth(), getHeight());
            setSize(getPrefWidth(), getPrefHeight());
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我必须在我自己的draw-method中调用super.draw() 调用setDrawable和setSize。

答案 1 :(得分:0)

尝试在初始化期间传递任何Drawable作为Image的构造函数参数。然后,您可以使用Drawable在运行时更改setDrawable()。这是Image类中的一些错误。

// initialize
Image kidImage = new Image(dummyDrawable);
// instead of Image kidImage = new Image();
..
..
// run time
kidImage.setDrawable(realDrawable);

这肯定会奏效。