2010-12-15 2 views
5

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

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

ответ

5

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

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

+0

Спасибо за быстрый ответ. Я думаю, что пока я собираюсь придерживаться заранее подготовленной карты. Чтобы избежать дополнительных вычислений для смещения, а затем нарисуйте плитки на осыпи. Мои изображения на карте составляют всего около 62 КБ. – 2010-12-15 15:57:51

1

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

0

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

1

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

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

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

Я работаю с большими изображениями, возможно, на среднем компьютере, и у меня есть около 150 FPS, блядя огромными изображениями, которые требуют всего ~ 100? MB RAM

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") 

 Смежные вопросы

  • Нет связанных вопросов^_^