Разрабатывая собственную игру, рано или поздно приходится задумываться о таком способе размещения объектов на сцене, при котором инфорацию о сцене можно будет хранить во внешнем файле.
На первоначальном этапе разработке вполне нормально увидеть в игре такой код:
|
... world.Insert(new Wall(Vector2D(250, 300), Vector2D(80, 20))); world.Insert(new Wall(Vector2D(250, 200), Vector2D(80, 20))); world.Insert(new Wall(Vector2D(200, 250), Vector2D(20, 80))); world.Insert(new LightEmitter(Vector2D(230, 450))); world.Insert(new PlayerSpawnPoint(Vector2D(230, 450))); |
Однако, рано или поздно игра вырастает больше чем в техническую демку и нам будет нужно редактировать уровни чаще чем код. Так или иначе, нам придётся хранить уровни в каком-то внешнем хранилище, будь то база данных, xml-файлы или же бинарные файлы своего формата.
Дело ясно: нам нужен менеджер уровней, который будет считывать данные об объектах из внешнего хранилища и создавать их на уровне.
Звучит просто, но на деле есть одна неприятная проблема: для того чтобы была возможность создать объект по идентификатору, менеджер уровней должен знать конструкторы всех создаваемых классов и иметь возможность выбирать из них нужные.
[Читать далее…]