来自NinePatchDrawable的Libgdx Scene2d图像不旋转

问题描述:

我正在使用NinePatchDrawable创建一个图像,并尝试使用rotateBy方法简单地旋转它,但它不是以某种方式旋转。我使用下面的代码片段:来自NinePatchDrawable的Libgdx Scene2d图像不旋转

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); 

旋转工作,如果我用另一个可绘制的,而不是对NinePatchDrawable图像的构造。有没有人面临同样的问题?

+0

NinePatch不支持旋转。你将不得不继承它并重写它的绘制方法来使它工作。图像仅支持实现TransformDrawable的Drawable上的旋转(其中TextureRegionDrawable是唯一的,除非您创建自己的)。 – Tenfour04 2014-12-02 01:29:47

+1

在这些情况下,它也可能有助于将其封装在表中,对其使用setTransform(true),并旋转表。 – noone 2014-12-02 05:08:16

调查后,我决定用容器如下:

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); 

可以直接加入容器阶段或在自定义窗口小部件实现中使用其draw方法。