【问题标题】:Libgdx Scene2d Image from NinePatchDrawable doesn't rotateNinePatchDrawable 的 Libgdx Scene2d 图像不旋转
【发布时间】:2014-12-01 22:09:33
【问题描述】:

我正在使用 NinePatchDrawable 创建一个图像,并尝试使用 rotateBy 方法简单地旋转它,但它并没有以某种方式旋转。我正在使用以下代码 sn-p:

TextureAtlas ninePatchAtlas = game.getAssetsInterface().getTextureAtlas(Constants.GAME_ATLAS);
AtlasRegion region = ninePatchAtlas.findRegion("drawPatch");
NinePatch ninePatch = new NinePatch(region, 59, 59, 59, 59);
NinePatchDrawable ninePatchDrawable = new NinePatchDrawable(ninePatch);
Image image = new Image(ninePatchDrawable);
image.setOrigin(image.getWidth() / 2, image.getHeight() / 2);
image.setPosition(200, 400);
image.setWidth(150);
image.rotateBy(45);

如果我在 Image 的构造函数上使用另一个 drawable 而不是 NinePatchDrawable,则旋转正在工作。有没有人遇到同样的问题?

【问题讨论】:

  • NinePatch 不支持旋转。您必须对其进行子类化并覆盖其绘制方法才能使其正常工作。 Image 仅支持在实现 TransformDrawable 的 Drawable 上旋转(其中 TextureRegionDrawable 是唯一的,除非您自己创建)。
  • 在这些情况下,将其包装在表格中也可能会有所帮助,在其上使用 setTransform(true),然后旋转表格。

标签: android libgdx scene2d


【解决方案1】:

经过调查,我决定使用容器如下:

TextureAtlas ninePatchAtlas = game.getAssetsInterface().getTextureAtlas(Constants.GAME_ATLAS);
AtlasRegion region = ninePatchAtlas.findRegion("drawPatch");
NinePatch ninePatch = new NinePatch(region, 59, 59, 59, 59);
NinePatchDrawable ninePatchDrawable = new NinePatchDrawable(ninePatch);
Image image = new Image(ninePatchDrawable);
image.setWidth(150);

Container<Image> container = new Container<Image>(image);
container.fill();
container.setSize(image.getWidth(), image.getHeight());
container.setOrigin(container.getWidth() / 2, container.getHeight() / 2);
container.setTransform(true);
container.setPosition(image.getX(), image.getY());
container.rotateBy(45);

您可以将容器直接添加到舞台或在自定义小部件实现中使用其绘制方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2023-03-08
    • 2012-03-15
    • 2014-04-21
    • 1970-01-01
    相关资源
    最近更新 更多