#python #pgzero
Вопрос:
screen = pygame.display.set_mode((WIDTH,HEIGHT))
canvas = pygame.Surface((WIDTH,HEIGHT))
def makefunnytiles(saice):
global WIDTH
global HEIGHT
global screen
global roomdata
global tiledefinitions
print("Baking Tiles")
print(roomdata)
index = 0
index2 = 0
for symbolic in saice:
index2 = 0
symbolic = symbolic.strip()
print("sanity")
for symbol in list(symbolic):
print(symbol)
if symbol in tiledefinitions:
canvas.blit(pygame.image.load("sprites/" str(roomdata['area']) "/" str(tiledefinitions[symbol]) ".png").convert_alpha(), ((32 * index2),(32 * index)))
index2 = 1
index = 1
screen.blit(canvas, (0,0))
pygame.display.flip()
print("drew screen")
print(str(canvas.get_width))
У меня возникла проблема с этим, когда по какой-то причине холст обрывается в середине экрана.
Еще одна проблема, с которой я сталкиваюсь, заключается в том, что pgzrun.go()
в конце файла происходит сбой программы с этой ошибкой:
Traceback (most recent call last):
File "C:UsersRushVisorDocumentsGlamoremain.py", line 100, in <module>
pgzrun.go()
File "E:Python39libsite-packagespgzrun.py", line 31, in go
run_mod(mod)
File "E:Python39libsite-packagespgzerorunner.py", line 113, in run_mod
PGZeroGame(mod).run()
File "E:Python39libsite-packagespgzerogame.py", line 217, in run
self.mainloop()
File "E:Python39libsite-packagespgzerogame.py", line 225, in mainloop
self.reinit_screen()
File "E:Python39libsite-packagespgzerogame.py", line 73, in reinit_screen
self.mod.screen.surface = self.screen
AttributeError: 'pygame.Surface' object has no attribute 'surface'
Я попытался изменить значения разрешения как для холста, так и для экрана и даже для самих позиций спрайта. Я размазываю холст по экрану, а не рисую непосредственно на экране, потому что, если я прав, это должно позволить мне легче добавлять прокрутку.
Я ценю любую помощь, которую кто-либо может мне оказать.
ИЗМЕНИТЬ: Код здесь https://paste.pythondiscord.com/tetogequze.py
Комментарии:
1. Зачем иметь отдельную
canvas
поверхность? Просто побыстрееscreen
?2. Почему вы загружаете изображения каждый раз, когда переносите их на холст? Загрузите изображения отдельно в список или словарь и выделите их таким образом, иначе вы будете загружать их каждый раз, что не является правильным способом. Мы не можем помочь с другой проблемой, так как мы не видим вашего main.py файл.
3. Каков размер растровых изображений плитки (png)?
4. 32 пикселя также извините за код. paste.pythondiscord.com/tetogequze.py
Ответ №1:
Ошибка
self.mod.screen.surface = self.screen
Переменная self.mod.screen
должна быть объектом класса pygame.Поверхность. Объекты этого класса не имеют переменной с именем surface
, AttributeError: 'pygame.Surface' object has no attribute 'surface'
из-за которой, по-видимому, произошла ошибка.
Это должно решить проблему, если вы не хотите реализовывать дополнительный класс с атрибутом поверхности: self.mod.screen = self.screen
. Но не забывайте , что это не копирует поверхность self.screen
, если вы хотите, чтобы вам понадобилось что-то вроде этого: self.mod.screen = self.screen.copy()
.
Прокрутка
Ваша идея-один из возможных способов реализации прокрутки. Еще один-это то, что вы храните какое-то происхождение и уничтожаете плитки на основе того, что. Если вы теперь хотите прокрутить, вам просто нужно изменить этот источник, который вы определили ранее.
Определение происхождения
origin = [10,10] # or use pygame.math.Vector2 or something else
Блит-код
index = 0
index2 = 0
for symbolic in saice:
index2 = 0
symbolic = symbolic.strip()
print("sanity")
for symbol in list(symbolic):
print(symbol)
if symbol in tiledefinitions:
screen.blit(pygame.image.load("sprites/" str(roomdata['area']) "/" str(tiledefinitions[symbol]) ".png").convert_alpha(), ((32 * index2) origin[0],(32 * index) origin[1]))
index2 = 1
index = 1
Теперь вам просто нужно вызывать код blit один раз в каждом кадре. Если теперь вы хотите прокрутить, просто сделайте что-то вроде этого: origin[0] = 10
(чтобы переместить все символы вправо)
Приведенный выше blit-код не самый быстрый, так как он должен загружать все изображения на каждый кадр, но это только пример того, как прокрутка может работать с этой другой идеей
РЕДАКТИРОВАТЬ: Я не очень хорошо знаком с Pygame-Zero, так что это просто основано на том, что я знаю о стандартной Pygame.