有效地模仿Pygame Tile-map

时间:2014-01-07 04:12:54

标签: python user-interface pygame

我的游戏地图是一个二维矩阵,由不同的图块组成( ex.map [y] [x] = tile )。每个图块都有一个图像和一个矩形。目前地图上有近1000块瓷砖,它们需要花费一些时间才能将它们中的每一块都插入到屏幕上。

我目前的目标是找到一种方法来减少访问矩阵中每个项目所需的时间,并且只将必要的tile对象blit到屏幕上。这是我试图找到解决方案的主要障碍:

- 因为它是一个侧滚动游戏,所以没有任何一块是静态的(矩形总是随着玩家的移动而调整,因此必须重新整理整个屏幕)。

以下是地图在游戏中的运作方式:

  1. 对于拼贴矩阵中的拼贴:blit tile to screen
  2. Blit player and NPCs
  3. 更新玩家位置
  4. 如果玩家移动:调整所有图块(相机系统)
  5. 我正在寻找更有效的做同样事情的想法。正如我上面所说的那样,每个darn tile都需要花费很多时间,而且除此之外,我不确定如何在不断更改位置时选择性地blit不同的tile。 欢迎所有想法。谢谢。

1 个答案:

答案 0 :(得分:1)

当您在瓷砖上进行迭代时,您可以进行测试以检查当前瓷砖是否包含在相机的视口中,如果是,您可以绘制,否则您可以跳过blitting瓷砖。

for tile in tiles:
  if camera.viewport.contains(tile.rect):
    tile.draw()

contains方法是确定矩形是否在另一个内。您还需要使用2个不同的参考框架,屏幕空间和世界空间。