Algorithm 游戏开发:如何使我的spritegame动态化?

Algorithm 游戏开发:如何使我的spritegame动态化?,algorithm,graphics,xna,Algorithm,Graphics,Xna,我正在写一个XNA游戏。但我想要一种智能的方式,让游戏在不同的分辨率下充满活力。对于了解黏液世界的人来说:就像黏液世界一样。因此可见区域的数量必须与分辨率无关。所以,如果我设置一个更高的分辨率。我不想看到更多。我只想知道更多细节。当然,精灵确实有细节 简短的例子:我有一个64x64的精灵。当我的决议是: 720p:我想用大小(例如!)42x42来绘制它 1080p:必须以64x64的尺寸绘制。(所以1080p表示精灵的全尺寸) 480p:必须以32x32的尺寸绘制 因此,每个精灵在屏幕上的外

我正在写一个XNA游戏。但我想要一种智能的方式,让游戏在不同的分辨率下充满活力。对于了解黏液世界的人来说:就像黏液世界一样。因此可见区域的数量必须与分辨率无关。所以,如果我设置一个更高的分辨率。我不想看到更多。我只想知道更多细节。当然,精灵确实有细节

简短的例子:我有一个64x64的精灵。当我的决议是:

  • 720p
    :我想用大小(例如!)
    42x42
    来绘制它
  • 1080p
    :必须以64x64的尺寸绘制。(所以1080p表示精灵的全尺寸)
  • 480p
    :必须以32x32的尺寸绘制
因此,每个精灵在屏幕上的外观必须相同,与分辨率无关

但是我不知道怎么做。

有什么帮助吗

我从未使用过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 xcord = 15.4 /* something absolute to the world*/
int xscreen = (int)((xcord - xviewport_offset) * xresolution)

其中,
xviewport\u offset
应为视图端口左侧的坐标,当然,区别应该是
<1.0
,否则精灵会在外面。

我从未使用过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 xcord = 15.4 /* something absolute to the world*/
int xscreen = (int)((xcord - xviewport_offset) * xresolution)

其中,
xviewport\u offset
应该是视图端口左侧的坐标,当然差值应该是
<1.0
,否则精灵会在外面。

使用SpriteBatch时,将缩放矩阵(
矩阵.CreateScale
)传递到
SpriteBatch.Begin

别忘了考虑纵横比(可能值得一读)

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


您可能希望阅读我关于此主题的答案(包括该答案中有关世界/视图/项目空间如何工作的答案的链接),以及可能的和。

使用SpriteBatch时,将缩放矩阵(
矩阵.CreateScale
)传递到
SpriteBatch.Begin

别忘了考虑纵横比(可能值得一读)

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

您可能想阅读我关于此主题的答案(包括该答案中有关世界/视图/项目空间如何工作的链接),也可能需要阅读。

虽然此“工作”,但XNA包含更好的、用于处理转换的内置功能。看到我的答案了。虽然这个“有效”,XNA包含了更好的、用于处理转换的内置功能。看看我的答案。