87 lines
4.9 KiB
Plaintext
87 lines
4.9 KiB
Plaintext
pygame.FULLSCREEN create a fullscreen display
|
||
pygame.DOUBLEBUF only applicable with OPENGL
|
||
pygame.HWSURFACE (obsolete in pygame 2) hardware accelerated, only in FULLSCREEN
|
||
pygame.OPENGL create an OpenGL-renderable display
|
||
pygame.RESIZABLE display window should be sizeable
|
||
pygame.NOFRAME display window will have no border or controls
|
||
pygame.SCALED resolution depends on desktop size and scale graphics
|
||
pygame.SHOWN window is opened in visible mode (default)
|
||
pygame.HIDDEN window is opened in hidden mode
|
||
|
||
Проблема 2: Копирование Cell
|
||
В цикле создания клеток final_cell = Cell(cell_classes[cell["type"]](**cell["cell"]["terrain_obj"])) создаётся terrain_obj, а затем deepcopy(final_cell) копирует Cell. Но если terrain_obj содержит мутабельные атрибуты (например, mutable sprite или вложенные объекты из eb_terrain), все клетки поделят эти вложенные объекты, вызывая визуальные артефакты (одинаковые спрайты изменяются вместе).
|
||
|
||
Исправление с deepcopy:
|
||
Примените deepcopy к terrain_obj перед передачей в Cell:
|
||
|
||
python
|
||
terrain_kwargs = deepcopy(cell["cell"]["terrain_obj"])
|
||
final_cell = Cell(cell_classes[cell["type"]](**terrain_kwargs))
|
||
self.cells[line].append(final_cell) # Без лишнего deepcopy, если terrain_obj уже глубокая копия
|
||
|
||
|
||
|
||
4. Неправильный доступ к JSON
|
||
|
||
python
|
||
for cell in buff[str(line)]: # ❌ buff[line] может отсутствовать
|
||
|
||
6. Отсутствует проверка существования спрайта
|
||
|
||
python
|
||
scaled = scale_image(sprites[cell.terrain_obj.sprite], self.scale) # KeyError!
|
||
|
||
Проблемы производительности
|
||
7. Масштабирование каждый кадр
|
||
scale_image() вызывается 150×150=22,500 раз в секунду при 60 FPS. Кэшируйте масштабированные спрайты.
|
||
|
||
=========================================================================================================
|
||
|
||
|
||
#
|
||
#техдолг:
|
||
# pydantic instead of dataclasses?
|
||
# почитать про Surface, Display, доку к pygame-gui
|
||
# проверить дефолтдикт field и None = None
|
||
# изучить pypmler
|
||
# настроить логирование всего
|
||
# SLOP: load_sprites
|
||
|
||
# проверить у ллм на ошибки - РЕГУЛЯРНАЯ АКТИВНОСТЬ:
|
||
# - deepcopy +
|
||
# - общие +
|
||
# !!! ДОБАВИТЬ ПРОКРУТКУ И МАСШТАБ КАРТЫ ДЛЯ МЫШИ !!!
|
||
#
|
||
# ДОДЕЛАТЬ move для Creature - хранить pos в объекте ???
|
||
#
|
||
# ПРОВЕРИТЬ МЕНЯЕТСЯ ЛИ ПЕРЕДАННЫЙ В ОБЪЕКТ cells и если да,
|
||
# перенести всё взаимодействие с картой в объекты, карта только хранит cells
|
||
# и готовит данные для отрисовки Render'ом
|
||
#
|
||
# ИГРОВОЙ ТАКТ? или только для действий их длительность?
|
||
#
|
||
# ПОСМОТРЕТЬ ПО КОММИТАМ ЗАЧЕМ БЫЛ НУЖЕН path_exists, удалить?
|
||
#
|
||
# добавил гуй, динамическая консоль, всё работает, но:
|
||
# - слоп, почистить
|
||
# - мини-баг - если первые вводимые буквы совпадают с клавишами управления, один раз успевает проскочить до лока. некритично.
|
||
# - при вводе текста нет прокрутки к концу
|
||
# - плавающий баг - если повводить текст, а потом закрыть консоль, игра не закроется по эскейпу.
|
||
#
|
||
#
|
||
# в дальнейшем вся отрисовка переедет в класс рендер,
|
||
# карта будет только вовзращать поверхность для отрисовки или даже просто Cells
|
||
# active_cell переедет в класс Control
|
||
#
|
||
# НАЙТИ В КОДЕ ГДЕ Я ТАК НЕ СДЕЛАЛ И ИСПРАВИТЬ - НАШЕЛ ОДНУ, ПОИСКАТЬ ЕЩЕ
|
||
#if a is None:
|
||
# print("a это точно None")
|
||
#
|
||
# Альтернатива
|
||
#if a is not None:
|
||
# print("a не None")
|
||
#
|
||
# Встреча с Егором:
|
||
#
|
||
# сборщик данных в цикле и перекладчик
|
||
# модуль автоинпута, принимает поток данных и переводит их в команды движка |