【问题标题】:Pygame Large SurfacesPygame 大表面
【发布时间】:2014-07-14 18:57:11
【问题描述】:

我正在绘制一张真实世界地板的地图,尺寸大约为 100,000 毫米 x 200,000 毫米。

我的初始代码包含一个函数,它使用我的 pygame 地图的窗口大小将任何基于毫米的位置转换为屏幕定位,但在深入研究了一些 pygame 函数后,我意识到 pygame 转换函数非常强大。

相反,我想创建一个与现实世界比例为 1:1 的表面,然后在将其传送到屏幕之前对其进行缩放。

这是正确的做法吗?我收到一条错误消息,显示宽度或高度太大。这是pygame的限制吗?

【问题讨论】:

  • 你加载的图片尺寸是多少?
  • 它实际上只是一个白色的表面,我在特定位置绘制了一堆精灵。

标签: python graphics pygame


【解决方案1】:

我不完全理解你的问题,但在这里尝试回答如下。

不,您不应该完全绘制到屏幕然后缩放它。这是错误的做法。您应该平铺非常大的表面,并且只绘制相关的瓷砖。如果您需要一个非常大的视图,您应该使用按比例缩小的图像(预缩放)。可能是因为绘制一个非常大的表面所需的内存量令人望而却步,并且缩放它会很慢。

使用某种全局矩阵将坐标转换为平铺版本,该矩阵将所有内容缩放到您期望的大小。因此,您还应该通过在视口的边界框中测试它们的包含来过滤掉不可见的精灵。跟踪您的视口位置。您将能够根据其“世界”坐标计算每个精灵在视口中的位置。

【讨论】:

    【解决方案2】:

    如果您的地图不是动态的,我建议您在游戏外绘制一张地图并在游戏中加载它。 如果您打算将游戏环境转换为地图,对于大型环境可能会很困难。转换为像素时,100,000mm x 200,000mm 是一个非常大的区域。我建议您在加载之前将其缩小。

    至于游戏内的缩放,你可以使用pygame.transform.rotozoompygame.transform.smoothscale

    也像第一个答案提到的那样,对于非常大的图像,缩放可能会占用大量内存和时间。将非常大的图像缩放为非常小的图像会使图像难以理解。

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      相关资源
      最近更新 更多