图像上的pygame.draw.rect

时间:2018-12-14 00:03:34

标签: python python-3.x pygame blit pacman

我正在编写python 3.7 pygame pacman克隆。 现在,我将级别水平硬编码为2d数组以进行碰撞检测,并且每执行一帧:

screen.fill((0,0,0))
for x in range(GRID_W):
    for y in range(GRID_H):
        num=tiles[x][y]
        if num is WALL or num is GHOST_HOUSE_BORDER:
            pygame.draw.rect(screen,(255,0,255),[x*TILE_W,y*TILE_H,TILE_W,TILE_H])

由于某些原因,这确实很慢。我认为pygame在2d for循环中逐个像素地绘制矩形,这是非常无效的。

是否有办法在主循环之前进行此渲染,所以我只是将图像涂抹到屏幕上了?还是有更好的方法呢?

我的计算机是Macbook Pro:

Processor 2.9 GHz Intel Core i7
Memory 16 GB 2133 MHz LPDDR3
Graphics Radeon Pro 560 4096 MB, Intel HD Graphics 630 1536 MB

它可以很好地运行强大的OpenGL和OpenCL应用程序,因此pygame不应过于繁琐。

1 个答案:

答案 0 :(得分:1)

放慢与图纸放慢无关。实际上是因为您的地图越来越大。

在文件中,您有几个具有属性speed的类(例如,第192行,您的播放器有一个self.speed)。如果在不增加子画面速度的情况下增加地图的大小,则它们看起来会移动得更慢。他们实际上在以完全相同的速度移动,只是相对于地图的速度不同。

如果您希望游戏能够缩放大小显示屏幕,则还需要基于相同的缩放因子来缩放所有内容。否则,增加/减小游戏的大小也会影响游戏中的所有交互(移动,跳跃等,取决于游戏)。

我建议在文件的顶部放置一个SCALE常量,并用它乘以所有大小调整和移动。这样一来,无论您要玩多大的游戏,游戏的感觉都一样。