在运行时更改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());
}
}
}
答案 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);
这肯定会奏效。