2010-11-24 37 views
1

我在写XNA游戏。但我想要一种智能的方式让游戏在不同分辨率下动态呈现。对于了解“粘粘世界”的人们来说,就像“粘粘世界”一样。所以可见区域的数量必须独立于分辨率。所以,如果我设置更高的分辨率。我不想看到更多。我只想要更多的细节。当然,精灵确实有细节。游戏开发:如何让我的spritegame动态分辨率?

简短例子:我有一个64x64的精灵。当我的分辨率是:

  • 720p:我想用一个尺寸(例如!)42x42绘制。
  • 1080p:必须绘制尺寸为64x64。 (因此,1080p表示精灵的全尺寸)
  • 480p:必须绘制大小为32x32。

因此,每个精灵必须在屏幕上看起来相同,而与分辨率无关。

但我不知道该怎么做。
任何帮助?

回答

3

我从来没有使用XNA,但通常是为了解决这种问题,你只需要从屏幕的实际分辨率中提取你的精灵的位置。

这意味着,你可以存储与绝对坐标(例如,在范围0.0f - 1.0)对象的位置,使x = 0.0是最左边的像素可见光和1.0是最右边的,故事的y坐标相同。

然后根据此坐标空间计算所有内容,并且担心在实际绘制之前将它们转换。当然,对于这种方法,您需要具有不同的尺寸,以独立于分辨率的方式保持相同的比例。例如,如果您有1080p,那么您选择使用64x64精灵,1080/64使用16.875,因此对于720p分辨率,您需要42.6像素(如选择:42x42),其他分辨率等等。

转型是那么很简单:

float xcord = ... 
float ycord = ... 

int xscreen = (int)(xcord*xresolution) 
int yscreen = (int)(ycord*yresolution) 

(我不知道是否已经XNA使用的float坐标)

另外其实我不知道你是什么样的游戏但是如果你的屏幕只显示整个世界/游戏的视口/你可以很容易地将滚动部分与这个转换结合在一起,因为你可以很容易地抵消它以获得屏幕坐标:

float xcord = 15.4 /* something absolute to the world*/ 
int xscreen = (int)((xcord - xviewport_offset) * xresolution) 

其中xviewport_offset应该是视口左侧的坐标,当然差别应该是< 1.0,否则精灵会在外面。

+0

这看起来不错!谢谢! – 2010-11-24 18:22:39

1

当使用SpriteBatch传递缩放矩阵Matrix.CreateScale)到SpriteBatch.Begin

不要忘记考虑纵横比(this question可能值得阅读)。

您可以结合缩放和转换矩阵处理滚动等

你可能需要阅读关于这个主题here(包括在回答这个问题谈谈如何世界/图/项目的链接,回答我的答案空间工作)以及here以及可能的herehere

相关问题