|
0 / 0 / 0
Регистрация: 29.04.2020
Сообщений: 1
|
|
ООП vs КОП29.04.2020, 18:41. Показов 6603. Ответов 3
Здравствуйте
Делаю простой движок для 2d-игры. Сейчас структура игровых объектов примерно такая: ___________________________________entit y _____________________________________| _________________________________ drawable ______ ________________ / _____________________________ \ ______________ physical __________________________ effect ________/_________|____________ \ _______________ /__ \ ____ ped _____projectile__________block__________ smoke_blood ___ /__ \ _____ /___ \ _________ /____\ _player_enemy__bullet _grenade pickup map Но уже становится понятно, что это не совсем правильное решение (например, наследование physical от drawable - высосано из пальца, например, может быть ветер, который не видно, но при этом он влияет на персонажа). Также теряется гибкость (например, нельзя сделать персонажа, ходящего сквозь стены (без костылей)). Прочитал пару статей по геймдеву и понял, что всё это дело лучше реализовать при помощи компонентно-ориентированного программирования. Действительно, на первый взгляд всё кажется простым - игровые объекты формируются из компонентов, которые не зависят друг от друга - плюсы очевидны: возможность независимого редактирования, легкость создания игровых объектов с самыми разными характеристиками и т.д. Но мне не понятен один нюанс, собсна вопрос темы заключается в следующем: Например, у меня будут следующие компоненты : - drawable - компонент делает объект видимым (отрисовка спрайтов/анимации, смена кадров анимации) - collideable- компонент участвует в проверке коллизии Вопрос вот в чем: Для отрисовки объекта необходимо знать его координаты. Для проверки столкновений - тоже. Так где же правильней хранить координаты объекта? Выходит, компоненты-то не такие уж и независимые. Не получится просто пройти по вектору компонентов и вызвать функцию update(). В любом случае между ними будут взаимодействия. Так в чем тогда смысл, зачем строить сложные связи между компонентами (в drawable получать координаты с collideable и т.д.), если можно просто идти по цепочке наследования? Или я чего-то не понимаю?
0
|
|
| 29.04.2020, 18:41 | |
|
Ответы с готовыми решениями:
3
В кассовом аппарате есть восемь 25-копеечных монет, 10 - стоимостью по 50 коп. и 12 - по 5 коп
Товар стоит "a" руб. "b" коп. За него заплатили "c" руб. "d" коп. Сколько сдачи требуется получить? |
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|||
| 30.04.2020, 11:38 | |||
|
1. Пересчитать координаты объектов. 2. Отрисовать объекты. Добавлено через 14 минут У объектов есть (могут быть) несколько существенных (влияющих на обработку) признаков. По каждому признаку своя иерархия. Поэтому эти признаки лучше всего организовать с помощью классов типов (как в Хаскеле) или с помощью миксинов.
1
|
|||
|
|
||
| 30.04.2020, 12:42 | ||
|
Например: Класс Place, поля XYZ От него наследуем GameObject, поле visible От него наследуем GameObjectMobile, поля: битмапы для анимации, текущая скорость, максимальная скорость и GameObjectStill - поле - битмап От GameObjectMobile наследуем, ну к примеру Пехотинец, Танкетка, Имперский разрушитель. Разница между ними должна быть уже не иерархическая, а конструктивная - у каждого их них имеется объект Weapon, если по-простому... И в этом они отличаются. Да, от игры к игре бывает выгодно менять иерархию... Но принцип остается - общий признак должен быть на вершине иерархии.
1
|
||
|
|
||||
| 01.05.2020, 11:19 | ||||
|
Но преимущество КОП в том, что взаимодействия компонентов реализуются не через жесткое наследование классов, а через взаимодействие компонентов в рантайм. Игровой объект выступает как контейнер компонентов, и каждый объект может содержать только необходимые ему компоненты. Когда некий компонент, например Drawable, захочет отрисоваться, он запрашивает у объекта компонент Transform. И если такой компонент найден - берет из него координаты для рисования.
1
|
||||
| 01.05.2020, 11:19 | |
|
Помогаю со студенческими работами здесь
4
Установка нескольких ОС на один коп
Сумма в отчете в формате Х руб. ХХ коп. Считывание информации с GPIB шины (КОП) Управление устройством через КОП (GPIB) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи
и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
|