我将假设您正在使用Spritebatch.Draw(Texture2D texture, Vector2 position, Color color)绘制代表瓷砖的二维精灵。是的,在这种情况下,“Vector2 位置”确实是窗口空间中的一对坐标。但是在 XNA 中还有许多其他的绘图方法,包括完全按照您在 OpenGL 中所做的操作,即创建多边形并使用世界/视图矩阵对其进行变换。例如,请参阅MSDN 上的本教程。
也就是说,您可以继续使用 Spritebatch 并使用Spritebatch.Draw(Texture2D texture, Rectangle destinationRectangle, Color color) “手动”执行缩放。假设一个 tile 应始终占据屏幕宽度的 5% 和屏幕高度的 6%,那么缩放将如下所示:
var destinationRectangle = new Rectangle(
positionX,
positionY,
0.05 * screenWidth,
0.06 * screenHeight);
spritebatch.Draw(tileTexture, destinationRectangle, Color.White);
您可以使用 GraphicsDevice.Viewport.Width/Height 获取屏幕的宽度和高度。
更一般地说,没有什么可以阻止您缩放坐标,但是您认为使用Matrix类和 Vector2/3.Transform 方法很合适,无论您是想通过着色器还是在 cpu 上执行计算,甚至通过自定义进行转换线性代数什么的。