我从来没有使用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
,否则精灵会在外面。
这看起来不错!谢谢! – 2010-11-24 18:22:39