2014-12-07 66 views
1

我对这个框架非常陌生,我遇到了一些让Sprite旋转的麻烦。我认为我做对了,但不知何故,它不工作。创建时旋转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()); 
} 

精灵是正确呈现在屏幕上,但根本没有旋转!这让我疯狂,我已经阅读了多个地方,我的代码似乎很好,但我无法使它工作,所以必须有一些我错过的东西,因为我对这个世界完全陌生。

非常感谢!

回答

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()。然后,在渲染的方法,你可以使用立方方法是这样的:

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

谢谢!它非常完美!我讨厌在新的东西,很难让你开始! – Andres 2014-12-07 15:13:13

1

如果你打电话sprite.draw(Batch batch)sprite.draw(Batch batch, float alphaModulation),libGDX将在所有为你的精灵属性的因素,而不是你不必自己做他们与你自己的平局。