Попробовал самую очевидную оптимизацию рендера, теперь отрисовываются только те клетки, которые в камере. Карта корраптится при движении камеры, надо исправить, зато масштаб работает и прирост производительности очень хороший, теперь до 200 объектов обрабатывается при стабильных 60 ФПС. Промежуточный коммит, хочу посмотреть сколько можно ещё выжать кадров на 500 объектах, потом нужно починить движение камеры. Также написал простую функцию спавна эльфов в главном цикле для создания нагрузки. Эльфы создаются в углах карты и по центру каждые сто тактов цикла. Они начинают перемещаться по карте в случайные точки, создавая относительно равномерную нагрузку поиска пути.
This commit is contained in:
22
plan.txt
Normal file
22
plan.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
1. Доработка системы задач: класс Task, новые задачи, проработка старых;
|
||||
2. Доработка движка и приведение его структуры в порядок:
|
||||
- вынос всех функций карты в карту, объекты знают свою позицию и им этого хватит.
|
||||
взаимодействия с картой и другими объектами должно происходить только в методе движения, остальные методы должны абстрагироваться от карты;
|
||||
|
||||
- вынос рендера в класс Render. Карта занимается только своими клеткам. Метод
|
||||
draw_map должен только готовить текстуру для Render, который будет ее рисовать;
|
||||
|
||||
- мини-движок поиска пути. class Pathfinder, который хранит в себе кэши,
|
||||
выбирает оптимальный способ поиска пути для конкретной ситуации. Для этого
|
||||
нужно ещё раз протестировать все способы, привести к единообразию интерфейсов.
|
||||
Задокументировать. Возможно понадобится вынос поиска пути в отдельный движок
|
||||
на другом языке и многопоточностью;
|
||||
|
||||
- привести в порядок Main Loop;
|
||||
|
||||
- вынести хранение и обработку объектов из карты в ObjectManager;
|
||||
|
||||
- сделать фундамент для MapManager, пока не развивать, но надо исходить из того
|
||||
что одновременно может рендериться несколько карт;
|
||||
|
||||
3. Оптимизация.
|
||||
Reference in New Issue
Block a user