我有一個需要能夠圍繞其中心旋轉但保持相同原點(用於設置位置等)的對象。所以,我想我需要使用一個Transform.
SFML - 使用變換在其中心周圍旋轉一個精靈
代碼是在Java(JSFML),但我認爲語法是相似的,並能夠被任何熟悉SFML的人都能理解。
public class DoorTile extends Tile {
private Transform t;
public DoorTile() {
...
t = new Transform();
...
sprite.setTexture(TileTextures.DOORTEXTURE);
}
public void rotateAroundCenter(float degrees) {
Vector2f center = SpriteUtils.getTextureCenter(TileTextures.DOORTEXTURE);
t = Transform.rotate(t, degrees, center.x, center.y);
}
@Override
public void draw(RenderTarget rt, RenderStates states) {
RenderStates newStates = new RenderStates(Transform.combine(t, states.transform));
sprite.draw(rt, newStates);
}
getTextureCenter(Texture t)
返回中心座標t
。
現在,當我應用這個旋轉時,我的精靈有一個奇怪的行爲。起初,使用45度作爲測試,他們完全從屏幕上消失。所以然後我嘗試了1度。受影響的精靈似乎已經「切斷」並向下翻譯。 這裏有一個圖片,使用1度作爲參數:
對於背景下,我想旋轉那些白色的小精靈(將「門」),使他們正確地適合在樓道里。例如。在垂直cooridors水平,垂直在水平走廊。 (精靈的白色部分是透明的佔位符,僅用於調試目的。)
我應該怎麼做才能使其正常工作?也就是說,我怎麼能:
- 旋轉精靈圍繞其中心
- 保留原來的原點(左上角)
每當你去旋轉一個對象周圍,確保撤消它的翻譯,IE它的位置。無論他們的位置在旋轉時,他們都會在旋轉時旋轉。因此,要圍繞其中心原點旋轉對象,您必須將該對象的一半寬度和高度移動到世界座標0,0之外。 – Yattabyte