pygame.draw.rect 图片上
pygame.draw.rect on image
我正在写一个 python 3.7 pygame pacman 克隆。
现在,我将关卡硬编码在一个二维数组中用于碰撞检测,我做的每一帧:
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 循环中逐像素绘制 rects,这将是非常低效的。
有没有办法在主循环之前进行渲染,所以我只是将图像 blit 到屏幕上?或者有更好的方法吗?
我的电脑是 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 不应该是一个延伸。
速度变慢与绘图速度慢无关。其实是因为你的地图变大了
在您的文件中,您有几个具有属性 speed
的 类(例如,第 192 行,您的播放器有一个 self.speed
)。如果你在不增加精灵速度的情况下增加地图的大小,它们看起来会移动得更慢。他们实际上以完全相同的速度移动,只是相对于地图的速度不同。
如果您希望您的游戏能够缩放显示屏尺寸,您还需要根据相同的缩放因子来缩放所有内容。否则,increasing/decreasing游戏的大小也会影响游戏中的所有交互(移动、跳跃等...取决于游戏)。
我建议在文件顶部放置一个 SCALE
常量,然后将所有大小调整和移动内容乘以它。这样无论您想玩什么尺寸的游戏,感觉都是一样的。
我正在写一个 python 3.7 pygame pacman 克隆。 现在,我将关卡硬编码在一个二维数组中用于碰撞检测,我做的每一帧:
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 循环中逐像素绘制 rects,这将是非常低效的。
有没有办法在主循环之前进行渲染,所以我只是将图像 blit 到屏幕上?或者有更好的方法吗?
我的电脑是 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 不应该是一个延伸。
速度变慢与绘图速度慢无关。其实是因为你的地图变大了
在您的文件中,您有几个具有属性 speed
的 类(例如,第 192 行,您的播放器有一个 self.speed
)。如果你在不增加精灵速度的情况下增加地图的大小,它们看起来会移动得更慢。他们实际上以完全相同的速度移动,只是相对于地图的速度不同。
如果您希望您的游戏能够缩放显示屏尺寸,您还需要根据相同的缩放因子来缩放所有内容。否则,increasing/decreasing游戏的大小也会影响游戏中的所有交互(移动、跳跃等...取决于游戏)。
我建议在文件顶部放置一个 SCALE
常量,然后将所有大小调整和移动内容乘以它。这样无论您想玩什么尺寸的游戏,感觉都是一样的。