我已经有几年没有使用过 LibGdx 了,但我记得在某个时候发现了这一点。我正在尝试创建一个按钮,并使用 ShapeRenderer 在按钮的边缘周围绘制一个矩形(以勾勒它的轮廓)。
到目前为止,我已经尝试创建自己的自定义 Actor 并在 draw 方法中使用 ShapeRenderer,但它不会更新矩形的位置、不透明度等。换句话说,它没有利用任何演员等级的好处。有什么方法可以使用 Actor 类绘制线条或形状,然后使用应用的动作等进行更新?
这是我在自定义 Actor 类中所做的示例:
public class Shape extends Actor {
ShapeRenderer sr;
float x, y, w, h;
public Shape (float x, float y, float w, float h) {
sr = new ShapeRenderer();
this.x = x;
this.y = y;
this.w = w;
this.h = h;
}
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
batch.end();
sr.begin(ShapeRenderer.ShapeType.Line);
sr.setColor(Color.BLACK);
sr.rect(x, y, w, h);
sr.end();
batch.begin();
}}
任何帮助将不胜感激; 提前致谢!
编辑 4/21 下午 2:39 EST 进行了建议的更改,形状仍然不会随着动作移动/旋转。还有其他建议吗?
public class Shape extends Actor {
ShapeRenderer sr;
public Shape (ShapeRenderer sr, float x, float y, float w, float h) {
this.sr = sr;
setX(x);
setY(y);
setWidth(w);
setHeight(h);
}
@Override
public void draw(Batch batch, float parentAlpha) {
super.draw(batch, parentAlpha);
batch.end();
sr.begin(ShapeRenderer.ShapeType.Line);
sr.setColor(Color.BLACK);
sr.rect(getX(), getY(), getWidth(), getHeight());
sr.end();
batch.begin();
}}
编辑 4/21 下午 2:46 EST 这是我实现自定义演员的方式,我将其添加到父组并在组上设置操作...
//Generate buttons
ImageTextButton.ImageTextButtonStyle style = new ImageTextButton.ImageTextButtonStyle();
parameter.size = game.labelButtonSize;
style.font = generator.generateFont(parameter);
style.fontColor = Color.BLACK;
buttonYes = new ImageTextButton(Consts.CAMERA_STRING_BUTTON_YES, style);
buttonYes.align(Align.left);
buttonYes.addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
Gdx.app.log("TAG", "Clicked Yes");
}
});
Group bY = new Group();
bY.addActor(buttonYes);
bY.addActor(new Shape(sr, buttonYes.getX(), buttonYes.getY(), buttonYes.getWidth(), buttonYes.getHeight()));
bY.addAction(Actions.rotateTo(90, 2));