Unreal Engine 4 http://uengine.ru/forum/ |
|
Unreal C++ общие вопросы. http://uengine.ru/forum/viewtopic.php?f=19&t=12369 |
Страница 5 из 8 |
Автор: | Snake [ 25 янв 2018, 11:01 ] |
Заголовок сообщения: | |
Код: DECLARE_DELEGATE_OneParam(FDelegateUdate, UMyClass*) UCLASS() class UMyClass: public UObject { bool MyBool; FDelegateUdate UD; void changeBool(bool NewValue) { Mybool = NewValue; UD.Execute(this); // вызов делегата ??? } } #include "MyClass.h" UCLASS() class UOtherClass : public UActorComponent { TArray<UMyClass*> SomeName; void setSomeName();//заполняем массив обьектов // привязка? //где-то вызываем... void BindUD() // не работает -_- { for (int i = 0; i < SomeName.Num(); i++) { SomeName[i]->UD.BindUObject(this, &UOtherClass::UpdateBoolInSomeName); //привязка делегата к событию ??? } } void UpdateBoolInSomeName(UMyClass* UpdtSomeName) { //Print LogTest UE_LOG(бла-бла, Warning, TEXT("DelegateExecuted by %s "), *GetNameSafe(UpdtSomeName)) //нет сообщений в логе... } } уобжекты валидные! что неправильно? |
Автор: | Dany [ 25 янв 2018, 11:28 ] |
Заголовок сообщения: | Re: |
Snake писал(а): хочу с делегатами на С++ разобраться... Цитата: В C# есть делегаты. В python есть делегаты. В javascript есть делегаты. В Java есть выполняющую их роль замыкания. А в C++ делегатов нет O_O. Читать дальше: https://habrahabr.ru/post/78299/ |
Автор: | Snake [ 25 янв 2018, 11:43 ] |
Заголовок сообщения: | |
имел ввиду в контексте анриаловских делегатов, конечно же. в статье как написать свой делегат... и возможно пока немного для понимания сложно(запутанно) для меня, Мне б уже готовыми анриаловскими пользоваться... было б неплохо все же примитивный пример на анриале, а то я из туторов или доков что-то неверно понимаю. |
Автор: | Snake [ 25 янв 2018, 13:37 ] |
Заголовок сообщения: | |
Цитата: А биндить и вызывать в любом, если у тебя есть ссылка на тот класс, где продекларирован делегат понятно. Спасибо! С этим было некое непонимание. Ивент есть а рефа на обьект с делегатом нет. а в классе с делегатом есть только ссылки на обьекты с ивентов, и привязать вызов делегата уже не представлялось возможным... А вот наоброт без проблем есть ивент и делегат, И из ссылки на обьект с делегатом можно забиндить ивент на это делегат... по сути если сравнивать с Блупринтами то делегат это Диспатчер, тоесть у кого обьявишь: UPROPERTY(BlueprintAssignable, Category = "EventDispatchers") FSomeDelegate DelegateVar; у того и будет диспатчер, в остальном все тоже самое... так же как и блупринтах его вызывать, так же как и в блупринтах назначать забинденый ивент |
Автор: | RepkaGaming [ 26 янв 2018, 19:41 ] |
Заголовок сообщения: | |
У меня тоже возник вопрос, есть у меня значит виджет от UUserWidget наследованный, а в нем есть UImage в который я вставил .pgn в котором часть картинки transparent, но когда я навожу курсор на прозрачную часть, onmouseover так же срабатывает, как мне решить этот вопрос? возможно ли как-то проверить пиксель в UImage по локальным координатам? Или есть какой-то другой вариант? Мне нужно что бы тригерилось только когда наводишь курсор на часть которая не transparent. |
Автор: | Snake [ 27 янв 2018, 08:45 ] |
Заголовок сообщения: | |
RepkaGaming, насколько мне известно нельзя, картинка.png только декорация для прямоугольного UImage. вот тут посмотри: https://forums.unrealengine.com/communi ... any-button |
Автор: | Snake [ 27 янв 2018, 09:10 ] |
Заголовок сообщения: | |
Цитата: DECLARE_DELEGATE_OneParam(FDelegateUdate, UMyClass*) кстати вероятная ошибка тут была: DECLARE_DELEGATE_OneParam( Имя_делегата, параметр_делегата, имя_параметра_делегата) в основной документации по делегатам нигде не упоминается что имя параметра нужно обьявлять через запятую после параметра... они даже в ихнем примере не обьявляли имя параметра Цитата: DECLARE_DELEGATE_OneParam( FStringDelegate, FString ); имя параметра нужно или не нужно обьявлять? |
Автор: | RepkaGaming [ 27 янв 2018, 10:07 ] |
Заголовок сообщения: | Re: |
Snake писал(а): RepkaGaming, насколько мне известно нельзя, картинка.png только декорация для прямоугольного UImage. вот тут посмотри: https://forums.unrealengine.com/communi ... any-button Спасибо, буду разбираться. слушай ты мой спаситель, это прямо на 100% то что мне нужно, спасибо. |
Автор: | Snake [ 08 фев 2018, 12:26 ] |
Заголовок сообщения: | |
скажем есть граф зависимости обьектов иерархический синими стрелками от родителя к детям и есть булевая обьекта говорит о направлении какой-то зависимости. если true то влияет на родителя... каждый обьект знает о своем родителе и первом поколении детей. задача перебрать рекурсивно все обьекты следуя иерархической последовательности с учетом зависимости. и вызвать какое-то событие в порядке зависимостей. тоесть зависимость имеет высшый приоритет, елси ее нет решает иерархия тоесть как решается пример обьекта 1 c картинки: Obj1(Obj2) так как на 1 влияет только 2 обьект 3: Obj3(Obj1(Obj2),Obj4) на него влияют 1 и 4 1ый влияет по иерархии, а 4 по зависимости... %) ммм... получаем что-то типа: Код: class Obj //класс обьекта { bool bAffectOnParent; //влияние на родителя bool bCalcDone=false; //булевая которую нужно поставить тру Obj* Parent; //родитель, переменная не учавствует в примере просто есть на всякий случай... TArray<Obj*> Childs; //дети //... функции установки родителей и детей не важны } //вызываем функцию с самым первым по иерархии обьектом как параметром // все обьекты должны получить "bCalcDone =true" в порядке зависимости void CalcAllChildes(Obj* ParentObj) { for (int i = 0; i < ParentObj.Childs.Num(); i++) { if(ParentObj.Childs[i] ->bAffectOnParent )//определяем влияние { CalcAllChildes(ParentObj.Childs[i]); //рекурсия // рекурсия углубляется до до независимого обьекта // и считает по порядку все зависимости которые вляияют на текущий обьект } else { //что делать если не влияет на родителя? //именно этот обьект на родителя не влияет //но его дети могут влиять на него //но считать его сейчас слишком рано, потому что еще текущий обьект не решен... //см картинку obj-3 // надо както потом его вызвать? } } ParentObj.bCalcDone =true; //отмечаем обьект посчитанным или вызываем нужный ивент - конечная цель //это работает когда все дети влияют на родителя // но наджо как-то решать переход с зависимостей на иерархию, когда зависимости нет //- черная стрелка на картинке } предложения? |
Автор: | Snake [ 08 фев 2018, 13:08 ] |
Заголовок сообщения: | |
Код: void CalcAllChildes(Obj* ParentObj) { for (int i = 0; i < ParentObj.Childs.Num(); i++) { if(ParentObj.Childs[i] ->bAffectOnParent )//определяем влияние { CalcAllChildes(ParentObj.Childs[i]); //рекурсия } } ParentObj.bCalcDone =true; for (int i = 0; i < ParentObj.Childs.Num(); i++) { if(!ParentObj.Childs[i] ->bAffectOnParent ) { CalcAllChildes(ParentObj.Childs[i]); //еще одна рекурсия } } } исправил тупняк был... |
Страница 5 из 8 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |