Pygame大表面
我正在绘制一个真实世界的楼层地图,尺寸大约是100,000毫米 x 200,000毫米。
我最开始的代码里有一个函数,可以把任何毫米为单位的位置转换成屏幕上的位置,这个是根据我在pygame地图里的窗口大小来做的。但是在研究了一些pygame的函数后,我发现pygame的变换功能其实很强大。
所以我想换个方法,先创建一个和现实世界比例1:1的表面,然后在把它显示到屏幕上之前再进行缩放。
这样做对吗?我遇到了一个错误,提示说宽度或高度太大。这是pygame的限制吗?
2 个回答
如果你的地图不是动态的,我建议你在游戏外面画一张地图,然后再把它加载到游戏里。如果你打算把游戏环境转换成地图,对于一个很大的环境来说,这可能会很困难。比如说,100,000mm x 200,000mm 这个面积在转换成像素的时候就非常大。我建议你在加载之前先把它缩小。
至于在游戏中缩放,你可以使用 pygame.transform.rotozoom
或者 pygame.transform.smoothscale
这两个方法。
另外,正如第一个回答提到的,缩放非常大的图片会占用大量的内存和时间。把一张非常大的图片缩小到很小的尺寸,可能会导致图片变得模糊不清。
我不太明白你的问题,不过我试着给你一些建议。
首先,不要先把整个画面画出来再缩放,这样做是不对的。你应该把很大的区域分成小块,只画出那些相关的小块。如果你需要显示一个很大的视图,最好使用一个已经缩小过的图片(预先缩放过的)。这样做是因为绘制一个非常大的区域需要消耗很多内存,而且缩放的速度会很慢。
你可以用某种全局矩阵把坐标转换成小块的版本,这样就能把所有东西缩放到你想要的大小。同时,你还需要通过检查每个精灵(小图标)是否在你的视口范围内,来过滤掉那些不可见的精灵。记得要跟踪你的视口位置。这样,你就能根据每个精灵的“世界”坐标来计算它在视口中的位置。