2014-12-01 2 views
1

Я создаю изображение с помощью NinePatchDrawable и пытаюсь повернуть его с помощью метода rotateBy просто, но он каким-то образом не вращается. Я использую следующий фрагмент кода:Libgdx Scene2d Изображение от NinePatchDrawable не вращается

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

поворот работает, если я использую другой Drawable вместо NinePatchDrawable на конструктору изображения. Кто-нибудь сталкивается с той же проблемой?

+0

NinePatch не поддерживает вращение. Вам придется подклассифицировать его и переопределить метод draw, чтобы он работал. Изображение поддерживает только поворот на Drawables, которые реализуют TransformDrawable (из которых TextureRegionDrawable является единственным, если вы не создаете свой собственный). – Tenfour04

+1

В таких случаях это может также помочь обернуть его в таблицу, использовать setTransform (true) на нем и вместо этого повернуть таблицу. – noone

ответ

2

После исследования я решил использовать контейнеры следующим образом:

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

Вы можете добавить контейнер непосредственно к стадии или использовать свой метод рисования в вашей реализации пользовательских виджетов.

Смежные вопросы