2015-03-18 3 views
1

Я создал программу, на которой мелкие плитки печатаются на экране. Плитки перепечатывают каждую итерацию моего игрового цикла. Он отлично работает, но я думаю, что это может вызвать проблемы, если я использовал больше фрагментов на более медленном компьютере. Моя идея улучшить его - сохранить все плитки как объединенные подповерхности, а не отдельные подповерхности. Таким образом, мне нужно было бы напечатать одно подповерхностное отображение на экране, противопоставляющее x многим объектам. enter image description here Вот как выглядит экран. Как сохранить экран в качестве подповерхностного слоя?Сохранение отображения pygame как pygame.Subsurface

+0

Я не уверен на 100%, что получаю то, что вы здесь говорите. Являются ли плитки статическими, но вы перерисовываете их на каждой итерации? Если это так, кажется, стыдно постоянно перерисовывать снова и снова. – oxrock

+0

@oxrock: Плитки не двигаются. было бы намного более эффективно только перепечатывать одну большую плитку, которая была инициализирована, чтобы состоять из всех мелких плиток в начале. – JGerulskis

ответ

0

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

Пример:

map = screen.subsurface(screen.get_rect()) 

Затем в конце вашего игрового цикла, просто блитирования этой карты перед выводом любых других предметов.

screen.blit(map,(0,0)) 
screen.blit(player.image,(player.rect.x,player.rect.y)) 
for monster in monster_list: 
    screen.blit(monster.image,(monster.rect.x,monster.rect.y)) # of course if you're using sprites, it's be best to just use group.draw() 
pygame.display.update() 

Таким образом, все сущности оказываются поверх вашей поверхности карты.

+0

Очень приятное решение! Но я думаю, что вам нужно использовать метод PyGames '.subsurface()', когда вы заливаете карту на поверхность основного экрана. – elegent

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