在创建时旋转精灵。

时间:2014-12-07 14:31:30

标签: java libgdx

我对这个框架很陌生,而且我在旋转Sprite时遇到了一些麻烦。我认为我做得对,但不知怎的,它不起作用。

这就是我所拥有的:我使用的是scene2d,我有一个名为Cube的Actor。在这个立方体的构造函数中,我为精灵生成了一个纹理,它是一个执行以下操作的立方体:

public Cube(){
    sizeOfCube = 40;

    Pixmap pixmap = new Pixmap(sizeOfCube,sizeOfCube, Pixmap.Format.RGBA8888);
    pixmap.setColor(Color.BLUE);
    pixmap.fill();
    pixmap.drawRectangle(0,0,sizeOfCube,sizeOfCube);

    Texture rectangleTexture = new Texture(pixmap);
    pixmap.dispose();

    rectangleSprite = new Sprite(rectangleTexture,0,0,sizeOfCube,sizeOfCube);
    rectangleSprite.setPosition(Gdx.graphics.getWidth() / 2 - rectangleSprite.getWidth() / 2,
            Gdx.graphics.getHeight() / 2);

    rectangleSprite.setOrigin(rectangleSprite.getWidth()/2, rectangleSprite.getHeight()/2);
    rectangleSprite.rotate(45f);
} 

在演员的绘画方法中我有:

@Override
public void draw(Batch batch, float alpha){
    batch.draw(rectangleSprite, rectangleSprite.getX(), rectangleSprite.getY());
}

Sprite在屏幕上正确渲染,但根本没有旋转!它让我发疯了,我已经阅读了多个地方,我的代码看起来很好,但是我无法使它工作,因此我必须有一些我完全没有的东西,因为我完全没有新世界。

非常感谢!

2 个答案:

答案 0 :(得分:1)

在绘制多维数据集时,您应该将有关轮换的信息发送到批处理:

@Override
public void draw(Batch batch, float alpha){
    batch.draw(rectangleSprite,
               rectangleSprite.getX(), 
               rectangleSprite.getY(),
               rectangleSprite.getOriginX(),
               rectangleSprite.getOriginY(),
               rectangleSprite.getWidth(),
               rectangleSprite.getHeight(),
               rectangleSprite.getScaleX(),
               rectangleSprite.getScaleY(),
               rectangleSprite.getRotation());
}

顺便说一句,你可以缩短它。不要创建新的精灵。只需调用Cube方法(它是你说的演员): setPosition() setOrigin() rotate()。然后在渲染方法中,您可以使用 Cube 方法,如下所示:

batch.draw(rectangleSprite, getX(), getY(), getOriginX(), getOriginY(), getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation());

答案 1 :(得分:1)

如果您致电sprite.draw(Batch batch)sprite.draw(Batch batch, float alphaModulation),libGDX会为您分配所有精灵属性,而不是您必须自己使用自己的绘制调用。