我正在开发一个简单的平铺游戏,它显示一个网格图像并用连续的图像层绘制它。所以我有 -
list_of_image_tiles = { GRASS: pygame.image.load('/grass.png').convert_alpha(), TREES: pygame.image.load('/trees.png').convert_alpha(), etc}
然后我把它们搞砸了 -
DISPLAYSURF.blit(list_of_images[lists_of_stuff][TREES], (col*TILESIZE,row*TILESIZE))
DISPLAYSURF.blit(list_of_images[lists_of_stuff][GRASS], (col*TILESIZE,row*TILESIZE))
请注意,为了简洁起见,我没有包含大量代码,但它基本上可以工作 - 除了性能非常缓慢。如果我注释掉DISPLAYSURF的性能跃升,那么我认为我需要一个更好的方法来做DISPLAYSURF的东西,或者可能是pygame.image.load位(是convert_alpha()最好的方法,记住我需要分层 - 图像方法?)
我读过一些名为psycho的东西可能有所帮助,但不知道如何适应它。任何想法如何提高性能最受欢迎。
答案 0 :(得分:2)
你可以做几件事。
surface
,然后只需将surface
每帧移至DISPLAYSURF
。screen.update(rectangle_list)
代替screen.flip()
。编辑以添加1的示例。 注意:你没有提供很多代码,所以我很适合我的代码。
# build up the level surface once when you enter a level.
level = Surface((LEVEL_WIDTH * TILESIZE, LEVEL_HIGHT * TILESIZE))
for row in range(LEVEL_HIGHT):
for col in range(LEVEL_WIDTH):
level.blit(list_of_images[lists_of_stuff][TREES], (col * TILESIZE, row * TILESIZE))
level.blit(list_of_images[lists_of_stuff][GRASS], (col * TILESIZE, row * TILESIZE))
然后在绘制部分
期间的主循环中# blit only the part of the level that should be on the screen
# view is a Rect describing what tiles should be viewable
disp = DISPLAYSURF..get_rect()
level_area = Rect((view.left * TILESIZE, view.top * TILESIZE), disp.size)
DISPLAYSURF.blit(level, disp, area = level_area)