Генерация простого графа сцены для Java-игры - PullRequest
1 голос
/ 12 февраля 2012

Я работаю над сравнительно простой игрой на Java с использованием OPENGL (через обработку).Я использую типичный шаблон MVC с обновлениями игры, которые передаются в апплет обработки с помощью шаблона Observer.Я хочу реализовать относительно простой граф сцены, который модельная сторона программы может обновлять, а сторона вида может читать.Пока все хорошо, но графы сцен для меня новы, и у меня возникают проблемы с приличным способом генерации графа сцен.

На стороне модели есть две коллекции игровых объектов намомент, один для юнитов в игре и второй для объектов окружающей среды.Я мог бы просто перебирать их и генерировать узлы для добавления к графу сцены.В чем я не уверен, так это в том, что делать, когда одна из этих сущностей изменена или уничтожена.Должен ли я снова генерировать все дерево (кажется довольно неэффективным) или каждый объект должен «знать» свой узел сцены и иметь возможность обновлять его при необходимости?

Есть ли у кого-нибудь общие рекомендации или ссылки на материалы о том, каксоздать граф сцены?

1 Ответ

0 голосов
/ 12 февраля 2012

Вы все равно должны иметь связь между графическим объектом и игровыми объектами.Потому что в противном случае вы не сможете перевести пользовательское событие, например щелчок мыши, из сцены в логику.

Поэтому я бы посоветовал установить связь между вашей моделью и видом.И, ИМХО, не путем создания идеального MVC с сокрытием одного от другого, так как это добавит слишком много хлопот на начальной стадии разработки.Простое добавление ссылки на графический объект (или, лучше, интерфейс с действиями, которые вы хотите выполнять с графикой) к игровому объекту должно работать для вас.

Это может выглядеть следующим образом:

interface UnitView {
   void add(Point position);
   void move(Point position);
   void remove(Point position);
   void setOnClick(Runnable callback);
}

class GlUnit implements UnitView extends GLSceneObjectOrWhateverItCalled {
    //this class implements all drawin and animation; and handles calls from model
    //through UnitView interface
}    

class Unit {
    void setView(UnitView view); // this method is called by manager which generated scene

    // here is your implementation of unit logic
}
...