Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 2319
Код:
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))
    //нет сообщений в логе...
  }
}

уобжекты валидные!
что неправильно?
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 237
Snake писал(а):
хочу с делегатами на С++ разобраться...


Цитата:
В C# есть делегаты. В python есть делегаты. В javascript есть делегаты. В Java есть выполняющую их роль замыкания. А в C++ делегатов нет O_O.


Читать дальше: https://habrahabr.ru/post/78299/
Аватара пользователя
Пользователь
Сообщения: 2319
имел ввиду в контексте анриаловских делегатов, конечно же.

в статье как написать свой делегат... и возможно пока немного для понимания сложно(запутанно) для меня,
Мне б уже готовыми анриаловскими пользоваться...
было б неплохо все же примитивный пример на анриале, а то я из туторов или доков что-то неверно понимаю.
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
А биндить и вызывать в любом, если у тебя есть ссылка на тот класс, где продекларирован делегат

понятно. Спасибо!
С этим было некое непонимание. Ивент есть а рефа на обьект с делегатом нет.
а в классе с делегатом есть только ссылки на обьекты с ивентов, и привязать вызов делегата уже не представлялось возможным...
А вот наоброт без проблем есть ивент и делегат,
И из ссылки на обьект с делегатом можно забиндить ивент на это делегат...

по сути если сравнивать с Блупринтами
то делегат это Диспатчер,
тоесть у кого обьявишь:
UPROPERTY(BlueprintAssignable, Category = "EventDispatchers")
FSomeDelegate DelegateVar;
у того и будет диспатчер, в остальном все тоже самое...
так же как и блупринтах его вызывать, так же как и в блупринтах назначать забинденый ивент
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 27
У меня тоже возник вопрос, есть у меня значит виджет от UUserWidget наследованный, а в нем есть UImage в который я вставил .pgn в котором часть картинки transparent, но когда я навожу курсор на прозрачную часть, onmouseover так же срабатывает, как мне решить этот вопрос? возможно ли как-то проверить пиксель в UImage по локальным координатам? Или есть какой-то другой вариант? Мне нужно что бы тригерилось только когда наводишь курсор на часть которая не transparent.
Аватара пользователя
Пользователь
Сообщения: 2319
RepkaGaming, насколько мне известно нельзя, картинка.png только декорация для прямоугольного UImage.
вот тут посмотри:
https://forums.unrealengine.com/communi ... any-button
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 2319
Цитата:
DECLARE_DELEGATE_OneParam(FDelegateUdate, UMyClass*)

кстати вероятная ошибка тут была:
DECLARE_DELEGATE_OneParam( Имя_делегата, параметр_делегата, имя_параметра_делегата)
в основной документации по делегатам нигде не упоминается что имя параметра нужно обьявлять через запятую после параметра...
они даже в ихнем примере не обьявляли имя параметра
Цитата:
DECLARE_DELEGATE_OneParam( FStringDelegate, FString );

имя параметра нужно или не нужно обьявлять?
_________________
we need to go deeper
Аватара пользователя
Пользователь
Сообщения: 27
Snake писал(а):
RepkaGaming, насколько мне известно нельзя, картинка.png только декорация для прямоугольного UImage.
вот тут посмотри:
https://forums.unrealengine.com/communi ... any-button


Спасибо, буду разбираться.

слушай ты мой спаситель, это прямо на 100% то что мне нужно, спасибо.
Аватара пользователя
Пользователь
Сообщения: 2319
скажем есть граф зависимости обьектов иерархический
синими стрелками от родителя к детям
и есть
булевая обьекта говорит о направлении какой-то зависимости.
Изображение
если 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; //отмечаем обьект посчитанным или вызываем нужный ивент - конечная цель
   //это работает когда все дети влияют на родителя
   // но наджо как-то решать переход с зависимостей на иерархию, когда зависимости нет
   //- черная стрелка на картинке
   
}

предложения?
_________________
we need to go deeper
Последний раз редактировалось Snake 08 фев 2018, 13:18, всего редактировалось 2 раз(а).
Аватара пользователя
Пользователь
Сообщения: 2319
Код:
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]); //еще одна рекурсия
     }
   }
}

исправил тупняк был...
_________________
we need to go deeper


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

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