我有一个需要能够围绕其中心旋转但保持相同原点(用于设置位置等)的对象。所以,我想我需要使用一个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