我有一个物体需要能够绕其中心旋转,但保持相同的原点(用于设置位置等)。所以,我想我需要使用Transform.
代码是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水平,水平走廊垂直。 (精灵的白色部分是透明度的占位符,仅用于调试目的。)
我该怎么做才能使这项工作正常进行?也就是说,我怎么能:
答案 0 :(得分:0)
所以,问题在于,我没有考虑到Transform处理其变换的方式(即从(0,0)开始)。因此,即使我尝试围绕纹理的中心旋转(在这种情况下为16x16纹理),它也会旋转所有精灵(8,8),这就是为什么我的结果很奇怪。所以,我改变了我的绘制函数来考虑精灵的位置:
<testsuite>
另外,我需要确保在旋转之前设置精灵的位置,因为draw()方法仍然认为我正在旋转它们(8,8)否则(因为精灵的默认位置)是(0,0))。