Объединение двух спрайтов в один спрайт (Libgdx)

Я хотел бы объединить два спрайта в один. Например:

private Sprite spriteGirl;
private Sprite spriteSweater;
private Sprite spriteDressed; 
..................................................................
atlas = new TextureAtlas(Gdx.files.internal("data/images.pack"));

spriteGirl = atlas.createSprite("girl");
spriteSweater = atlas.createSprite("sweater");
...................................................................

"spriteSweater" должен располагаться на спрайте "spriteGirl" (в определенных координатах). Эта комбинация и есть спрайт "spriteDressed".

После этого получившийся спрайт "spriteDressed" можно было анимировать.

Я бы лучше переместил "spriteDressed" вместо "spriteGirl" и "spriteSweater" по отдельности.

Любая помощь высоко ценится.


person user1691159    schedule 22.09.2012    source источник


Ответы (1)


Я бы создал составной класс, который содержит спрайты, из которых он состоит, и управляет ими.

public class CompositeSprite {

    Array<Sprite> componentSprites;

    public CompositeSprite() {
        componentSprites = new Array<Sprite>();
    }

    public void addComponentSprite(Sprite sprite) {
        componentSprites.add(sprite);
    }

    // ... other methods left out for brevity

    public void draw(SpriteBatch spriteBatch) {
        for (Sprite sprite : componentSprites) {
            sprite.draw(batch)
        }
    }

}
person nEx.Software    schedule 22.09.2012
comment
Спасибо. В любом случае, я думал объединить спрайты перед рисованием. Если мы нарисуем spriteGirl и переместим его (произвольно) в точку (x,y), эта позиция должна вычисляться непрерывно, чтобы spriteSweater мог следовать шагам spriteGirl, сохраняя относительное положение. Вместо этого, если мы объединим спрайты перед отрисовкой (spriteDressed), не нужно будет оценивать положение. - person user1691159; 23.09.2012
comment
В этом случае создайте растровое изображение, нарисуйте на нем оба изображения, а затем создайте из него текстуру. Обратите внимание, что это будет не очень эффективно, но будет соответствовать вашим требованиям. Я бы по-прежнему рекомендовал попробовать составной подход, так как это даст большую эффективность и большую гибкость. - person nEx.Software; 23.09.2012
comment
Большое спасибо за Вашу помощь. Я попробую оба подхода. - person user1691159; 23.09.2012
comment
Попробуйте использовать FrameBuffer. Рисуйте в этом буфере все, что хотите, и используйте его текстуру для рисования. - person Yura Shinkarev; 04.02.2015