algorithm - 游戏开发 : How to make my spritegame dynamic for resolutions?

标签 algorithm graphics xna

我正在编写 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/

相关文章:

algorithm - 有向加权图的邻接矩阵与邻接表

arrays - 我们在空间复杂度中考虑二维数组指针的大小是多少?

java - 使用 java.awt.BasicStroke 制作虚线动画

c# - 如何在 MonoGame/XNA 中绘制虚线

xna - 如何在 xna 中定义正交 View ?

c# - 在 C# 中将 2D 图像旋转到一个点

algorithm - 求和函数证明它很大 oh 和 big theta

algorithm - 在整数数组中查找子数组和

java - 如何设置JPanel的透明背景?

OpenGL:单个三角形平面的正面和背面有不同的光效吗?