Страницы

пятница, 11 сентября 2009 г.

Единый контроль

У одного(а наверняка и не одного) была такая проблема: создал объект(допустим игрок) во встроенном редакторе, в этом объекте были данные, которые брались следующими объектами. Затем "игрока" удалили и вновь создали. Процесс создания объектов в игре соответствует созданию объектов в редакторе. т.е. объекты обращались к несуществующему ещё "игроку". И получилось, что приходится вновь переделывать уровень ради того чтобы работало. Вот такая проблема, проблема порядка создания объектов. В Game Maker сообществе нашли решение и даже назвали его - контроллер. Профи называют объект такого класса - Синглтон.

т.е. объект класса в единственном экземпляре. На языке Game Maker это значит - образец объекта в единственном экземпляре. Что даёт нам такой объект? Он даёт нам централизованный контроль над <чем-то>(обычно какой-то частью программы, но может и всей программой). Этот объект может недопустить создание дубликатов, некорретную работу и т.д. Так же в синглтоне можно задать порядок создания. Минус этого объекта, что это внешнее управление проектом, т.е. внутренний редактор уже отпадает, вы не сможете создавать объекты визуализированно, только создав свой редактор.
При созданий этого объекта, у вас появляется централизованная(чёткая и вертикальная) власть. Она и так была, но теперь это сделано в явном виде. В этом объекте можно сделать игровой цикл, а возможно игровой цикл будете делать через внутренний объект(чтобы, например, сделать несколько геймплеев в нескольких объектах). Иерархию связей вы продумываете сами. Главное: объект(образец) класса(объекта) должен быть в единственном экземпляре. Его вы размещаете во встроенном редакторе. В созданий синглотона вы прописываете все нужные вам действия, например:

////
keys = instance_create(-1, -1, oKeyboard); //здесь управление клавиатурой
mouse = instance_create(-1, -1, oMouse); //здесь управление мышкой

pause = false; //переменная паузы

gameplay = instance_create(-1, -1, oGameplay); //здесь игровой цикл
LoadLevel(gameplay.status); //Загружаем комнату соответственно с геймплеем
////

Если объект oMouse должен стоять перед oKeyboard, т.к. берёт данные оттуда, то это не трудно сделать.

Абсолютно все объекты должны создаваться в синглтоне. Как бы быть под его началом. Синглтон как босс, остальные его подчинённые. Иерархия может быть настолько сложной, насколько это понадобится.

Плюсы:
+Правильно раставленные приоритеты.
+Явный контроль.
+Чётко отлаженная работа.

Минусы:
-Встроенный редактор вам уже не поможет.

Комментариев нет:

Отправить комментарий