Pygame: плиточная карта или большое изображение - PullRequest
5 голосов
/ 15 декабря 2010

Я пытаюсь решить, лучше ли использовать предварительно визуализированное большое изображение для игры с прокруткой карты или визуализировать отдельные плитки на экране в каждом кадре.Я пытался программировать игру в обоих направлениях и не вижу очевидных различий в скорости, но это может быть связано с моим отсутствием опыта.

Кроме памяти, есть ли причины скорости, чтобы не использовать предварительно отрендеренную карту?

Ответы [ 4 ]

5 голосов
/ 15 декабря 2010

Единственная причина, по которой я могу придумать выбор одного над другим на современном оборудовании (что-либо столь же быстрое и с таким же большим количеством оперативной памяти, как, скажем, на iPhone), - это технические, которые облегчают понимание самого кода игры.Производительность для их различения невелика.

Единственное исключение, о котором я могу подумать: если вы используете действительно массивный фон и выполняете рендеринг плиток в графическом процессоре, плитки могут быть текстурами, и вы получитескромный скачок скорости, поскольку вам не нужно передавать большое количество данных между процессором и процессором в расчете на кадр, и он будет использовать очень мало видеопамяти.

1 голос
/ 22 марта 2013

Возможно, это действительно зависит от размера карты, но это не должно быть проблемой даже для низкоуровневого компьютера.

Проблема с большими изображениями заключается в том, что перерисовка всех занимает много времениматериал на нем, так что вы получите негибкую «карту».

Но реальное преимущество с оптимизированным изображением (используйте функцию convert () и 16 бит) - это быстрые блики.

Я также работаю с большими изображениями, возможно, со средним хорошим компьютером, и у меня около 150 кадров в секунду, благодаря огромным изображениям, которые требуют всего ~ 100?МБ ОЗУ

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")
1 голос
/ 15 декабря 2010

Память и скорость тесно связаны между собой. Если ваш набор плиток помещается в видеопамять, а предварительно обработанная карта - нет, скорость пострадает.

0 голосов
/ 17 декабря 2010

Зависит от размера карты, которую вы хотите сделать, однако, с реальными технологиями очень трудно увидеть, что карта тайлов «визуализируется», чтобы занять больше времени, чем ожидалось, игры на основе плиток почти исчезли, однако хорошая практика и отправная точка в мир игрового программирования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...