Pygame:平铺地图或大图

时间:2010-12-15 15:12:59

标签: python pygame

我正在尝试决定是否更好地将预渲染的大图像用于滚动地图游戏,或者在每个帧的屏幕上渲染瓷砖。我试图以两种方式对游戏进行编程,并且没有看到任何明显的速度差异,但这可能是由于我缺乏经验。

除了记忆之外,是否有速度原因不使用预渲染的地图?

4 个答案:

答案 0 :(得分:5)

我能想到的唯一原因就是在现代硬件上选择其中一个(任何东西都快,并且像iPhone那么快),这些技术将使游戏代码本身更容易理解。区分它们没有太多表现。

我能想到的一个例外是,如果你使用真正大规模的背景,并在GPU中进行平铺渲染,平铺可以是纹理,你将获得适度的减速,因为你不需要推动太多每帧cpu和gpu之间的数据,它将使用非常少的视频RAM。

答案 1 :(得分:1)

记忆与速度密切相关。如果您的图块集适合视频内存,但预渲染的地图不适合,速度将受到影响。

答案 2 :(得分:1)

也许它真的取决于地图的大小,但即使是低级计算机,这也不应该是一个问题。

大图像的问题在于需要花费大量时间重新绘制其中的所有内容,因此您将获得不灵活的“地图”。

但是优化图像的真正优势(使用convert() - 函数和16位)是快速的blitting。

我也可以在一台中等优秀的计算机上使用大图像,我只需要大约150张FPS,只需要大约100张? MB RAM

image = image.convert()#video system has to be initialed

以下代码创建一个图像(5000 * 5000),在其上绘制一些东西,(将其blit到屏幕上,填满屏幕)* 50次,最后它告诉我们做了一个blit和一个多长时间翻转。

def draw(dr,image,count,radius,r):
   for i in range(0,5000,5000//count):
      for j in range(0,5000,5000//count):
         dr.circle(image,(r.randint(0,255),r.randint(0,255),r.randint(0,255)),[i,j],radius,0)

def geschw_test(screen,image,p):
   t1 = p.time.get_ticks()
   screen.blit(image,(-100,-100))
   p.display.flip()
   return p.time.get_ticks() - t1

import pygame as p
import random as r

p.init()
image = p.Surface([5000,5000])
image.fill((255,255,255))
image.set_colorkey((255,255,255))
screen = p.display.set_mode([1440,900],p.SWSURFACE,16)
image = image.convert()#extremely efficient
screen.fill((70,200,70))
draw(p.draw,image,65,50,r)#draw on surface
zahler = 0
anz = 20
speed_arr = []
while zahler < anz:
   zahler += 1
   screen.fill((0,0,0))
   speed_arr.append(geschw_test(screen,image,p))
p.quit()
speed = 0
for i in speed_arr:
   speed += i
print(round(speed/anz,1),"miliseconds per blit with flip")

答案 3 :(得分:0)

取决于您想要制作的地图的大小,然而,使用实际技术很难看到拼贴地图“渲染”花费的时间超过预期,基于平铺的游戏几乎熄灭,但总是如此良好的实践和游戏编程世界的起点