Я працюю над грі 2d вгору в SFML 2, і мені потрібно знайти елегантний спосіб, коли все буде працювати і поєднуватися разом.
Дозвольте мені пояснити. У мене є ряд класів, які успадковують абстрактну базу, яка забезпечує метод малювання та метод оновлення для всіх класів.
У циклі ігор я закликаю оновлення, а потім малюю на кожному класі, я думаю, що це досить поширений підхід. У мене є класи з плитки, зіткнення, програвач та менеджер ресурсів, який містить усі плитки / зображення / текстури. Зважаючи на те, як працює вхід у SFML, я вирішив включити вхід для кожного класу (якщо потрібно) у своєму виклику оновлення.
До цих пір я проходив залежно від необхідності, наприклад, у класі гравців, коли натискається клавіша руху, я називаю метод класу зіткнення, щоб перевірити, чи буде позиція, на яку хоче перейти гравець, зіткнення, і рухати програвач лише у випадку зіткнення.
Здебільшого це чудово працює, але я вважаю, що це можна зробити і краще, я просто не знаю як.
Зараз у мене є більш складні речі, які мені потрібно здійснити, наприклад: гравець може підійти до об'єкта на землі, натисніть клавішу, щоб забрати / розблокувати, і він відобразиться в інвентарі. Це означає, що потрібно зробити кілька речей:
- Перевірте, чи програвач знаходиться в діапазоні певного предмета на натисканні клавіші, інакше не продовжуйте.
- Знайдіть предмет.
- Оновіть текстуру спрайту на елементі від його тексту за замовчуванням до "розграбованої" текстури.
- Оновіть зіткнення предмета: воно могло змінити форму або було видалено повністю.
- Інвентаризацію потрібно оновити доданим елементом.
Як змусити все спілкуватися? З моєю нинішньою системою я закінчую, щоб мої заняття виходили за межі сфери, а методи викликали один одного в усьому місці. Я міг би зв'язати всі класи в одному великому менеджері і дати кожному посилання на батьківський клас менеджера, але це здається лише трохи кращим.
Будь-яка допомога / порада буде дуже вдячна! Якщо щось незрозуміле, я із задоволенням розширюю питання.