我正在编写 XNA 游戏。但我想要一种让游戏针对不同分辨率动态变化的智能方式。对于了解 The World of Goo 的人:就像 The World of Goo 一样。所以可见区域的数量必须与分辨率无关。所以,如果我设置更高的分辨率。我不想看到更多。我只想要更多细节。当然, Sprite 确实有细节。
简短示例:我有一个 64x64 的 Sprite 。当我的决心是:
720p
:我想用(例如!)42x42
的大小绘制它。1080p
:必须以 64x64 的尺寸绘制。 (所以 1080p 意味着 Sprite 的全尺寸)480p
:必须以 32x32 的尺寸绘制。
因此,无论分辨率如何,每个 Sprite 在屏幕上都必须看起来相同。
但是我不知道怎么做。
有什么帮助吗?
最佳答案
我从未使用过 XNA,但通常要解决此类问题,您只需要从屏幕的实际分辨率中抽象出 Sprite 的位置即可。
这意味着您可以使用绝对坐标(例如在 0.0f - 1.0
范围内)存储对象位置,以便 x = 0.0
最左边的像素是可见的,1.0
是最右边的,与y
的故事相同坐标。
然后你根据这个坐标空间计算所有东西,你担心在实际绘图之前转换它们。当然,对于这种方法,您需要具有不同的尺寸,并且必须以独立于分辨率的方式保持相同的比例。
例如,如果您有 1080p,那么您选择 64x64 Sprite ,1080/64 给出 16.875,因此对于 720p 分辨率,您将需要 42.6 像素(如您选择的:42x42),其他分辨率依此类推。
p>然后转换就非常简单了:
float xcord = ...
float ycord = ...
int xscreen = (int)(xcord*xresolution)
int yscreen = (int)(ycord*yresolution)
(我不知道XNA是否已经使用 float 作为坐标)
此外,我实际上不知道您正在制作哪种游戏,但如果您的屏幕只显示整个世界/游戏/任何内容的视口(viewport),您可以轻松地将滚动部分与此转换结合在一起,因为您可以轻松偏移它以获得屏幕坐标:
float xcord = 15.4 /* something absolute to the world*/
int xscreen = (int)((xcord - xviewport_offset) * xresolution)
哪里xviewport_offset
应该是视口(viewport)左侧的坐标,当然差值应该是< 1.0
否则 Sprite 会在外面。
关于algorithm - 游戏开发 : How to make my spritegame dynamic for resolutions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4269947/