Всем привет)) Не могу придумать идею такой вот системы: на

сцене есть предметы, которые можно подбирать (далее "пикапы"). Эти пикапы влияют на персонажа, например, наносят урон или прибавляют здоровье. то есть, понятная и обычная тема. Но я задумался сделать немного другую штуку: сделать только один класс предмета, полем которого является массив логических эффектов, которые будут накладываться на персонажа при оверлапе. Звучит просто, как я полагаю. В редакторе этот предмет можно выкинуть на сцену и добавить нужные эффекты (например, добавление жизней, добавление патронов, отнятие жизни, замедление персонажа). То есть набор эффектов может любым, хоть процедурно генерируй. Однако я вообще не могу догнать, как можно сделать такую логику, что можно использовать за "эффект", чтобы результат был нормальным. Из банального, массив эффектов может просто хранить енумки и потом через switch выполнять нужные действия, но это фигня какая-то. Неплохо было бы вынести логику отработки эффекта в отдельный класс, но тогда в массиве хранить экземпляры классов эффектов? И так для каждого пикапа? Тоже такое себе. То есть, вот на этом этапе я хз, как это можно провернуть. Поэтому буду благодарен за идеи или даже рабочие варианты (вдруг кто-то уже делал подобное, это не выглядит чем-то новым).

8 ответов

8 просмотров
紅龍- Автор вопроса

да, но если нужен будет предмет, который добавляет здоровье и делает что-то еще, то нужно и для этого отдельный класс писать. Ну и тут уж точно процедурно не сгенерируешь предметы (в плане логических эффектов, которыми они будут влиять на персонажа). и через свитч не хочется. А если менеджером, то он все равно будет перебирать варианты эффектов. Тут разве что хранить в массиве указатели на функции, которые static в классе менеджере. Хотя, вроде не такой плохой вариант

紅龍
да, но если нужен будет предмет, который добавляет...

Что значит "делает что-то ещё"? Если боишься кучи свичей, то создай TMap

紅龍
да, но если нужен будет предмет, который добавляет...

И что за "логические эффекты"? Можно примеры из существующих игр?

紅龍- Автор вопроса
Жертва бюрократических проволочек
И что за "логические эффекты"? Можно примеры из су...

Просто слово "эффект" могут воспринять, как графический эффект.

紅龍- Автор вопроса
Жертва бюрократических проволочек
И что за "логические эффекты"? Можно примеры из су...

Да всякие No Man's Sky, Borderland и подобное. Там это к оружию применялось. В духе: огненное замедляющее откидывающее ружье

紅龍- Автор вопроса

спасибо

Создаешь ++ эктор(твой пикап объект) в нем массив TArray<UBase_Effect> Effects у массива должно быть UPROPERTY(Instanced) Далее в твоем UBase_Effect(abstract class) делаешь метод Execute(AActor* Actor) Создаешь интерфейс с нужными методами( ChangeHealth(int32 ByValue, ChangeSpeed(int32 ByValue) Реализуешь их своем персонаже Создаешь дочерние классы от UBase_Effect и переопределяешь их метод Execute. UChangeHealth_Effect, UChangeSpeed_Effect Для примера у тебя будет UChangeHealth_Effect class с параметром ChangeHealthByValue - реализация будет { Actor->ChangeHealth(ChangeHealthByValue)) На оверлепе, просто вызываешь для каждого элемента в массиве Effect метод Execute() Если подумать, можно докинуть таймеры на отмену эффектом (т.е. своего рода эффекты с длительностью) и т.п. + можно динамически спавнить свой пикап объект

紅龍- Автор вопроса
Vlad Krepski
Создаешь ++ эктор(твой пикап объект) в нем массив ...

Годно звучит. Про Instanced и человек выше говорил, я погуглил, но толком не понял его суть в UPROPERTY

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта