Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pygame:平铺地图或大型图像_Python_Pygame - Fatal编程技术网

Python Pygame:平铺地图或大型图像

Python Pygame:平铺地图或大型图像,python,pygame,Python,Pygame,我正在尝试决定,是使用预渲染的大图像进行滚动地图游戏,还是在每一帧的屏幕上单独渲染瓷砖。我尝试了两种方式来编程游戏,但没有发现速度上的明显差异,但这可能是因为我缺乏经验 除了内存方面,还有没有速度方面的理由不使用预先渲染的地图?在现代硬件(速度和内存都和iPhone一样快)上,我能想到的唯一的理由是让游戏代码本身更容易理解的技术原因。没有太多性能方面的知识来区分它们 我能想到的一个例外是,如果您使用的是真正的海量背景,并且在GPU中进行平铺渲染,平铺可以是纹理,您将获得适度的速度提升,因为您不需

我正在尝试决定,是使用预渲染的大图像进行滚动地图游戏,还是在每一帧的屏幕上单独渲染瓷砖。我尝试了两种方式来编程游戏,但没有发现速度上的明显差异,但这可能是因为我缺乏经验


除了内存方面,还有没有速度方面的理由不使用预先渲染的地图?

在现代硬件(速度和内存都和iPhone一样快)上,我能想到的唯一的理由是让游戏代码本身更容易理解的技术原因。没有太多性能方面的知识来区分它们


我能想到的一个例外是,如果您使用的是真正的海量背景,并且在GPU中进行平铺渲染,平铺可以是纹理,您将获得适度的速度提升,因为您不需要在cpu和GPU之间每帧推送太多数据,并且它将使用很少的视频ram。

内存和速度密切相关。如果您的平铺集适合视频内存,但预渲染的贴图不适合,则速度将受到影响。

取决于您想要制作的贴图的大小,但是,使用实际技术,很难看到平铺贴图“渲染”的时间比预期的要长,基于平铺的游戏几乎会消失,然而,这始终是一个很好的实践,也是游戏编程世界的起点

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

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

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

我也在一台中等性能的计算机上处理大图像,通过快速播放只需要100帧的大图像,我的每秒速度大约为150帧?MB内存

image = image.convert()#video system has to be initialed
下面的代码创建了一个图像(5000*5000),在上面画了一些东西,(将它点到屏幕上,填充屏幕)*50次,最后它告诉你做一个点和一个翻转需要多长时间

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")
def绘图(dr、图像、计数、半径、r):
对于范围内的i(050005000//count):
对于范围内的j(050005000//count):
圆博士(图像,(r.randint(0255),r.randint(0255),r.randint(0255)),[i,j],半径,0)
def geschw_测试(屏幕、图像、p):
t1=p.time.get_ticks()
屏幕显示(图像,(-100,-100))
p、 display.flip()
返回p.time.get_ticks()-t1
将pygame导入为p
将随机导入为r
p、 init()
图像=p.表面([50005000])
图像填充((255255))
图像。设置颜色键((255255))
屏幕=p.display.set_模式([1440900],p.SWSURFACE,16)
image=image.convert()#效率极高
屏幕填充((70200,70))
绘制(p.绘制,图像,65,50,r)#在表面上绘制
扎勒=0
澳新银行=20
速度_arr=[]
而扎勒<澳新银行:
扎勒+=1
屏幕填充((0,0,0))
速度加速附加(geschw\u测试(屏幕、图像、p))
p、 退出
速度=0
对于速度方向上的i:
速度+=i
打印(圆形(速度/anz,1),“带翻转的每磅毫秒”)

感谢您的快速回复。我认为现在,我将继续使用预渲染贴图。为了避免额外的计算偏移,然后在屏幕上绘制瓷砖。我的地图图像只有大约62kB。