Архитектура игры
|
|
Starly | Дата: Вторник, 01 Июля 2014, 13:32 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Добрый день форумчане! Есть у меня модуль отвечающий за ввод - input, и в нем класс Keyboard, и модуль логики - отвечающий за логику игры. В модуле логики есть класс игрока - Player с методом goForward(). Так вот, лучше в классе Keyboard вызывать метод goForward(), или в классе Player производить проверку нажатия клавиши?
|
|
| |
Flakky | Дата: Вторник, 01 Июля 2014, 14:36 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| Starly, Поставь в keyboard переменную goForward и в Player проверку на эту переменную. Так ты сможешь в будущем сделать настройку управления.
Если же настройки не будет, то можно по любому.
|
|
| |
Starly | Дата: Вторник, 01 Июля 2014, 14:48 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Flakky, спасибо за ответ Я так подумал, что создавать экземпляр класса игрока в классе ввода будет не совсем правильно, поэтому буду делать проверку в классе игрока. И вообще вся эта проектировка очень сложная Раньше этим не занимался.
|
|
| |
HerrPotapov | Дата: Вторник, 01 Июля 2014, 14:58 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Starly, must-read для начинающего (и не только) геймдевелопера http://gameprogrammingpatterns.com/ Глава Design Patterns Revisited вообще универсальная - подходит не только для игр, но и для любого приложения. Единственная возможная проблема с этой книгой - она на английском
Discord: alpotapov#1741
Интервью с разработчиком WarCastle - Читаем и вникаем!
|
|
| |
Starly | Дата: Вторник, 01 Июля 2014, 15:03 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| HerrPotapov, английский не проблема. И статьи я читал. Мне нужен был ответ на конкретный вопрос, а общая архитектура уже почти продумана. Так получилось, что в нашей "компании" из пары человек только художник и кодер.
Сообщение отредактировал Starly - Вторник, 01 Июля 2014, 15:08 |
|
| |
antonyvolkoff | Дата: Вторник, 01 Июля 2014, 16:07 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| Если попробовать использовать события? В модуле ввода, регистрируется слушатель. При обновлении модуль ввода отсылает слушателям события через заранее определенную функцию. Например, думаю идея понятна: Код // Событие struct SEvent { // содержание события: код клавиши, время или еще чего... EKey key; };
// Слушатель событий struct IInputListener { virtual void OnInputEvent(SEvent *) = 0; };
// Модуль ввода struct IInput { virtual void AddListener(IInputListener *) = 0; virtual void RemoveListener(IInputListener *) = 0; };
// Использование struct IPlayer : public IInputListener { };
struct CPlayer : public IPlayer { // Инииализация игрока bool Initialize() { pInput->AddListener(this); return true; }
// Обработчик событий void OnInputEvent(SEvent *pEvent) { if(pEvent->key == KEY_UP) { goForward(); } } };
|
|
| |
Starly | Дата: Вторник, 01 Июля 2014, 17:48 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| Если кому интересно, вопрос я решил так:
Listener нажатий и остального: MyInputProcessor.java класс для работы с listener'ом: MyInput.java и пример, метод handleInput(): RpgChar.java
Сообщение отредактировал Starly - Вторник, 01 Июля 2014, 17:51 |
|
| |