有没有一种方法可以基本上以1080p(或720p)开发我的XNA游戏作为我的默认分辨率,然后根据设置的分辨率,只需将游戏中的所有内容缩放到合适的大小,而无需设置缩放系数在每个Sprite Draw()方法中?
我的想法是,我可以基于1080p的分辨率开发所有图形,配置坐标等,但是对于XBOX,只需将res设置为720p并缩小(以便XBOX将所有内容视为720因此,处理开发人员文档中提到的所有分辨率,并在PC级别上处理任何所需的分辨率或宽高比,方法是自动将视图用于非16:9的分辨率。
我已经进行了游戏设置,以便在最高级别调用spritebatch.begin()和end(),围绕所有其他Draw调用,这样我就可以在技术上只传递缩放矩阵,但每当我要做到这一点,它会做一些奇怪的事情,例如让视图偏离中心,或只占据屏幕的四分之一。
有没有最佳实践方法来实现这一目标?
答案 0 :(得分:4)
如果您在SpriteBatch.Begin
中设置了缩放矩阵,那么它会缩放您绘制的每个精灵的大小和位置,并使用SpriteBatch
,直到您调用End
。
SpriteBatch
使用客户端空间,其中零位于Viewport
的左上角,该空间中的一个单位相当于视口中的一个像素。
当您对SpriteBatch
进行转换时,您绘制的精灵会在绘制之前将这些转换应用于它们。因此,您可以(并且应该)使用相同的技术来翻译您的场景(例如,将其置于播放器中心)。
您的游戏是以720p开发的,而您正在使用SpriteBatch
而不进行转换。你的右下角有一个精灵。假设它的纹理是(32,32)像素,精灵的origin
是(16,16)(原点是在纹理空间中指定的,所以这是精灵的中心)。精灵的position
是(1280,720)。精灵的scale
为1,它的结果大小为(32,32)。您将在屏幕的右下角看到精灵的左上角四分之一。
现在您移动到1080p(比720p大1.5倍)的屏幕。如果不向SpriteBatch
添加缩放矩阵,您可以看到整个精灵,其屏幕的三分之二,向右和向下。
但是你想扩大你的整个场景,以便在1080p看起来就像在720p那样。因此,为Matrix.CreateScale(1.5f, 1.5f, 1f)
添加矩阵SpriteBatch.Begin
(注意使用1表示Z轴,因为这是2D而不是3D),并且没有其他。
现在你的精灵场景将缩放1.5倍。如果不对实际Draw
调用进行任何更改,您的精灵将在位置(1920,1080)(屏幕右下角)绘制,其大小将为(48,48)(大1.5倍) ,它的起源仍将是中心。您将在屏幕的右下角看到精灵的左上象限,就像在720p时一样,并且具有相同的相对大小。