我对这个框架很陌生,而且我在旋转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在屏幕上正确渲染,但根本没有旋转!它让我发疯了,我已经阅读了多个地方,我的代码看起来很好,但是我无法使它工作,因此我必须有一些我完全没有的东西,因为我完全没有新世界。
非常感谢!
答案 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会为您分配所有精灵属性,而不是您必须自己使用自己的绘制调用。