Полезное

Мы Вконтакте

Discord канал

#
Модератор: Di-Crash
Аватара пользователя
Пользователь
Сообщения: 157
Цитата:
"кастануть" = "получить доступ к дочерним переменным объекта"

Cast - приведение типа для получения доступа к переменным и методам класса (того класса к которому приведение выполняется), а не дочерним переменным объекта. У объекта дочерними являются максимум компоненты, но доступ к ним осуществляется командой GetComponents().

Это все равно что сказать, что цвет волос - дочерняя переменная волос, а не свойство класса - волосы, на объекте - голова...
Не понимание этих вещей и приводит к 98% ошибок.
_________________
Если вас обосрали, потерпите... Скоро оно само отсохнет и отпадет...
Skype: ogasoda
Мой канал на YouTube
Аватара пользователя
Администратор
Сообщения: 1581
Цитата:
и иногда это просто необходимо(мне очень часто). 99% кастов приходится на MyCharacter.


Значит вы на 99% от написания хорошего кода. Если вы часто используете касты, значит ещё не научились оперировать наследованием классов или делать одинаковый функционал для разных классов. Например при нажатии на Е вам нужно взаимодействовать с объектом. Функционал описан внутри самого объекта. Вещей, с которыми вы можете взаимодействовать - более 100. Вопрос: Как все это организовать?

Вот с вашими кастами тут и будет проблема. С персонажем точно так же. Если вдруг вы решите добавить ещё один класс, который должен подвергаться тем же условиям и иметь такой же функционал, то вся ваша система порушится.

Простой пример: Есть специальные триггеры, в которых при входе персонажа, на самом персонаже выполняется какое-то действие (например у него начинается приступ радиоактивного отравления). Вы при входе в триггер проверяете кастом на персонажа, потом в нем запускаете кастом эвент или функцию. Через месяц разработки вы добавили ИИ, у которого тоже может быть такая же реакция. И вам придется ещё добавить каст. Потом у вас будет собака.. Ещё один каст. И так 100 раз.
Вот это и проблема, и решить её помогут интерфейсы или наследование классов.
_________________
Просьба, не писать вопросы по движку в ЛС. Я не единственный, кто знает UE4, и поэтому пишите на форум или в группу.
Аватара пользователя
Пользователь
Сообщения: 157
Цитата:
интерфейсы или наследование классов.

тут немного поясню что есть что.

Наследование я уже пояснял на примере Actor>автомобиль>Грузовик
Каждый потомок наследует свойства и методы предка, плюс добавляет (или нет) свои.
Это фундамент, который просто нужно понять, иначе беда ))

Но бывают случаи, когда наследственность не помогает, например.
У вас Два класса:
1. Сундук - наследник Actor класса
2. Персонаж - наследник Character класса.
У них есть общий предок - Actor, но к нему не подобраться если вы хотите сделать инвентарь, например.

У Вас у сундука и Персонажа есть инвентарь, и Вот вы хотите узнать что в инвентаре сундука или перса.
Первое - неразумное решение - проверить сундук это или Перс и по разному получить доступ к инвентарю.
И если у вас еще авто с сундуком, то это еще один каст и так далее.

Тут приходит на помощь Интерфейс - набор методов, которые как бы добавляются к основным методам класса.

И вот мы имеем Интерфейс с методами
1. AddInventory(Item)
2.GetInventory(Item)

и цепляем интерфейс к каждому из классов (сундуку и персу).
И они теперь имеют общий функционал, к которому можно обратиться по касту интерфейса, типа

Код:
Cast<Интерфейс>(Сундук)->AddInventory(Item);
Cast<Интерфейс>(Сундук)->GetInventory(Item);

или

Код:
Cast<Интерфейс>(Персонаж)->AddInventory(Item);
Cast<Интерфейс>(Персонаж)->GetInventory(Item);


Как видим - интерфейс весьма серьезно расширяет возможности. Это почти как второе наследование.
_________________
Если вас обосрали, потерпите... Скоро оно само отсохнет и отпадет...
Skype: ogasoda
Мой канал на YouTube
Последний раз редактировалось Роман Потапов 06 окт 2015, 16:48, всего редактировалось 2 раз(а).
Аватара пользователя
Пользователь
Сообщения: 157
Понимание принципов объектного программирования (их не много) очень важно. Если вы хотите что-то серьезное сделать, то без этого понимания вы ничего не добьетесь.
C++ и его надстройка Blueprint - это языки объектно-ориентированные. Все вышеперечисленные принципы там сидят повсюду.
_________________
Если вас обосрали, потерпите... Скоро оно само отсохнет и отпадет...
Skype: ogasoda
Мой канал на YouTube
Аватара пользователя
Пользователь
Сообщения: 295
Flakky писал(а):
Цитата:
и иногда это просто необходимо(мне очень часто). 99% кастов приходится на MyCharacter.


Значит вы на 99% от написания хорошего кода. Если вы часто используете касты, значит ещё не научились оперировать наследованием классов или делать одинаковый функционал для разных классов. Например при нажатии на Е вам нужно взаимодействовать с объектом. Функционал описан внутри самого объекта. Вещей, с которыми вы можете взаимодействовать - более 100. Вопрос: Как все это организовать?

В мобе логика - когда пресекается коллизия, происходит каст на персонажа и проверяется какая из указанных переменных = 1, после каста определила что LowLick = 1, моб падает и т.д. Мобов 100 штук и они постояно спавнятся, но падает тот кто получил лоу кик, если будет второй персонаж, добавлю в моба еще одну колизию. Для ММО мой вариант канешно не подойдет, но для двух игроков более чем достаточно.
Изображение
Иногда передаю и получаю с помощью каста, иногда с помощью интерфейса, иногда с помощью обычных событий, как мне удобно так и программирую, критерий хорошго кода, это не лагает и не багает. И происходит на экране то что хочешь видеть.
Компьютер у меня достаточно слабый, а мобов без лагов бегает в тесте гораздо в большем кол-ве чем будет задейтвованно в самой игре. Если не будет лагать на моем компьютере, для меня это просто чудесный вариант. Мое фпс у меня на виду, и его падения ниже нормы, я не позволю.

Вот передача данных через интерфейс, все тоже самое можно сделать и через каст на чарактера, но здесь мне видится правильным делать через интерфейс, хотя если бы я был уверен что через каст будет на 1% быстрее, переделал бы все через каст.
Изображение

Наверно в любом проекте от эпика вы найдете касты и не мало, наверно им тоже далеко до Вас Flakky.
Аватара пользователя
Пользователь
Сообщения: 157
Есть самый бесстрастный судья - время.
Со временем человек либо становится мудрее, либо просто сдувается.
Полагаю бессмысленно далее копья ломать, доказывая, что наследственность и интерфейсы это то, что доктор прописал.
Помнится в начале своего изучения UDK я тоже был упертый как . Prutaleks.
Даже когда мне говорили что на кисмет нельзя решить многие задачи я считал иначе ))
Время сделало из меня более рациональное существо )
_________________
Если вас обосрали, потерпите... Скоро оно само отсохнет и отпадет...
Skype: ogasoda
Мой канал на YouTube
Аватара пользователя
Пользователь
Сообщения: 157
. Prutaleks писал(а):
Наверно в любом проекте от эпика вы найдете касты и не мало, наверно им тоже далеко до Вас Flakky.

Что же вы такие нежные то?
Один тут вещает что нужно быть проще, другой все время истерит что его не понимают.
Вам в параллельный мир пора, где пони ходят по радуге и какают бабочками )
_________________
Если вас обосрали, потерпите... Скоро оно само отсохнет и отпадет...
Skype: ogasoda
Мой канал на YouTube
Аватара пользователя
Пользователь
Сообщения: 1297
Роман Потапов писал(а):
. Prutaleks писал(а):
Наверно в любом проекте от эпика вы найдете касты и не мало, наверно им тоже далеко до Вас Flakky.

Что же вы такие нежные то?
Один тут вещает что нужно быть проще, другой все время истерит что его не понимают.
Вам в параллельный мир пора, где пони ходят по радуге и какают бабочками )

ЛОл, вот у тебя припекло то)))
_________________
Мои работы.
Youtube Channel
Форум по геймдеву.
Аватара пользователя
Пользователь
Сообщения: 157
Цитата:
ЛОл, вот у тебя припекло то)))

И не говори ))) Остапа (про)несло не по-детски ))
Но и тебя, видать, тоже цепануло, раз понял намек )))
_________________
Если вас обосрали, потерпите... Скоро оно само отсохнет и отпадет...
Skype: ogasoda
Мой канал на YouTube
Аватара пользователя
Пользователь
Сообщения: 157
Deus Ex Machina, просто ты не такой веселый как Он (не буду называть его имя в суе, нето опять всплывет)))).
Его тролить прикольно. Он еще маленький, не понимает, что троллинг это не банальный срач, а такой завуалированный наезд, как сейчас. Ну ты же понимаешь))), чай не глупый (потому и не такой забавный как Он)...
Так что ты там сильно не ругйсЁ )) все пучком )) у меня все по-простому(как ты любишь), по-крестьянски))

ПыСы. К тому же в подписи я сразу говорю, что не нужно переживать. Попало? Пережевали и дальше пошли )))
_________________
Если вас обосрали, потерпите... Скоро оно само отсохнет и отпадет...
Skype: ogasoda
Мой канал на YouTube


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 95

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница