Суббота, 10 Апреля 2021, 15:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Создание игр и всё, что с этим связано » Геймдизайн » Архитектура игры (Взаимосвязь модулей, ООП)
Архитектура игры
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, спасибо за ответ smile Я так подумал, что создавать экземпляр класса игрока в классе ввода будет не совсем правильно, поэтому буду делать проверку в классе игрока. И вообще вся эта проектировка очень сложная sad Раньше этим не занимался.
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
Форум игроделов » Создание игр и всё, что с этим связано » Геймдизайн » Архитектура игры (Взаимосвязь модулей, ООП)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг