gpt4 book ai didi

c# - XNA - 分辨率独立的基于图 block 的游戏

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:38 30 4
gpt4 key购买 nike

我开始学习如何使用 XNA 制作简单的基于图 block 的游戏,但我发现自己遇到了问题。使用 OpenGL,当我定义要绘制的坐标时,例如,一个矩形,这些坐标指的是我制作的视口(viewport)(正交或透视)。因此,例如,坐标 0,0 的点位于屏幕的中心。

使用 XNA,所有尺寸和坐标都以像素表示,因此如果我绘制一个 10x10 的矩形,它将是一个 10 像素 x 10 像素的矩形,原点坐标也是如此。这样,如果我改变分辨率,比例就会改变(在 OpenGL 中,它们没有,都具有相同的大小)。如何在不受像素比例限制的情况下使用 XNA?谁能告诉我哪里做错了或者我该怎么做?

最佳答案

我假设您使用的是 Spritebatch.Draw(Texture2D texture, Vector2 position, Color color)绘制代表图 block 的 2d Sprite 。是的,在这种情况下,“Vector2 位置”确实是窗口空间中的一对坐标。但是还有许多其他方法可以在 XNA 中进行绘制,包括完全按照您在 OpenGL 中所做的那样进行,即创建多边形并使用世界/ View 矩阵对其进行转换。参见例如 this tutorial在 MSDN 上。

就是说,您可以继续使用 Spritebatch 并使用 Spritebatch.Draw(Texture2D texture, Rectangle destinationRectangle, Color color)“手动”执行缩放.假设一个图 block 应始终占据屏幕宽度的 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 上执行计算,甚至是通过自定义线性代数或其他方式进行转换。

关于c# - XNA - 分辨率独立的基于图 block 的游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10354627/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com