我正在编写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不应过于繁琐。
答案 0 :(得分:1)
放慢与图纸放慢无关。实际上是因为您的地图越来越大。
在文件中,您有几个具有属性speed
的类(例如,第192行,您的播放器有一个self.speed
)。如果在不增加子画面速度的情况下增加地图的大小,则它们看起来会移动得更慢。他们实际上在以完全相同的速度移动,只是相对于地图的速度不同。
如果您希望游戏能够缩放大小显示屏幕,则还需要基于相同的缩放因子来缩放所有内容。否则,增加/减小游戏的大小也会影响游戏中的所有交互(移动,跳跃等,取决于游戏)。
我建议在文件的顶部放置一个SCALE
常量,并用它乘以所有大小调整和移动。这样一来,无论您要玩多大的游戏,游戏的感觉都一样。