2012-02-12 6 views
1

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

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

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

ответ

0

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

Поэтому я бы посоветовал ввести связь между вашей моделью и представлением. И, ИМХО, а не созданием прекрасного 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 
} 
+0

Спасибо за вашу помощь. Я использовал аналогичное решение, где каждый объект мира знает, как рисовать себя и генерирует узел сцены, который можно добавить к дереву. – noise