我正在绘制一张真实世界地板的地图,尺寸大约为100,000mm x 200,000mm。
我的初始代码包含一个函数,它使用我的pygame映射的窗口大小将任何基于毫米的位置转换为屏幕定位,但在深入研究了一些pygame函数后,我意识到pygame转换函数非常强大。
相反,我想创建一个真实世界比例为1:1的表面,然后在我将其显示到屏幕之前进行缩放。
这是正确的方法吗?我收到一个错误,表示宽度或高度太大。这是pygame的限制吗?
答案 0 :(得分:2)
我不完全理解你的问题,但试图在这里回答如下。
不,你不应该完全吸引到屏幕,然后缩放它。这是错误的做法。您应该平铺非常大的曲面并仅绘制相关的平铺。如果您需要非常大的视图,则应使用缩小的图像(预缩放)。可能是因为绘制一个非常大的表面所需的内存量是令人望而却步的,并且缩放它会很慢。
使用某种全局矩阵将坐标转换为平铺版本,该矩阵可将所有内容缩放到您期望的大小。因此,您还应该通过在视口的边界框内测试它们的包含来过滤掉不可见的精灵。跟踪您的视口位置。您将能够根据其" world"计算每个精灵应位于视口中的位置。坐标。
答案 1 :(得分:0)
如果你的地图不是动态的,我会建议在游戏外画一张地图并在游戏中加载它。 如果您打算将游戏环境转换为地图,那么对于大型环境来说可能会很困难。转换成像素时,100,000mm x 200,000mm是一个非常大的区域。我建议你在加载前缩小它。
至于游戏中的缩放,您可以使用pygame.transform.rotozoom
或pygame.transform.smoothscale
。
同样的第一个答案提到,缩放可能会占用大量图像的大量内存和时间。将非常大的图像缩放到非常小的图像会使图像难以理解。