• [UE4] C++实现Delegate Event实例(例子、example、sample)


    http://aigo.iteye.com/blog/2301010

    如何用蓝图实现Delegate Event:

    http://aigo.iteye.com/blog/2269663

     

    原文作者:@玄冬Wong

    转载请注明出处:http://aigo.iteye.com/blog/2301010

     

    虽然官方doc上说Event的Binding方式跟Multi-Cast用法完全一样,Multi-Cast论坛上也有很多例子,但是实际是不一样。。而且论坛上找不到相关例子。后来看了下runtime/core的源码,Event的binging方式如下(附上完整步骤):

     

    1,先定义自定义Event,此例中我们定义在GameMode中,名字叫 MyInitEvent。例子中定义的是无参函数,如果需要带参数,官方doc讲的有

    Cpp代码  收藏代码
    1. UCLASS()  
    2. class MYPROJ_API AMyGameMode : public AGameMode  
    3. {  
    4.     GENERATED_BODY()  
    5.       
    6. public:  
    7.   
    8.     AHGameMode();  
    9.   
    10.     //定义Event  
    11.     DECLARE_EVENT(MyUObject, MyInitEvent)  
    12.       
    13.     //用于获取Event引用的函数,方便在GameMode之外执行binding  
    14.     MyInitEvent& OnInitialize() { return InitEvent; }  
    15.       
    16. private:  
    17.     //Event实例化  
    18.     MyInitEvent InitEvent;  
    19.       
    20.     //Event的binding指针  
    21.     FDelegateHandle DHandle;  
    22. }  

     

    2,执行Binding。MyUObject::TestFun是需要被触发的函数,这里假设是一个普通的无参成员函数:

    Cpp代码  收藏代码
    1. MyUObject* MyObj = NULL;    //这里假设创建MyUObject  
    2. if (MyObj)  
    3. {  
    4.     DHandle = MyGameMode->OnInitialize().AddUObject(MyObj, &MyUObject::TestFun);  
    5. }  

     

    注:任何UObject的普通函数都可以被设置为Event的回调函数,但如果函数是UFUNCTION,那么需要将AddUObject替换为AddUFunction

     

    3,触发Event,这里假设在BeginPlay中触发:

    Cpp代码  收藏代码
    1. void AMyGameMode::BeginPlay()  
    2. {  
    3.     InitEvent.Broadcast();  
    4. }  

     

    4,移除Event,比如之前bingding的event不想再触发了:

    Cpp代码  收藏代码
    1. MyGameMode->OnInitialize().Remove(DHandle);  
  • 相关阅读:
    一个体验好的Windows 任务栏缩略图开发心得
    扫脸动画
    ShimmerTextView
    201512-2 消除类游戏 (水题,暴力)
    CCF 201512-1 数位之和 (水题)
    UVa 557 Burger (概率+递推)
    CCF 201604-2 俄罗斯方块 (模拟)
    CCF 201604-1 折点计数 (水题,暴力)
    UVa 10213 How Many Pieces of Land ? (计算几何+大数)
    UVa 1641 ASCII Area (计算几何,水题)
  • 原文地址:https://www.cnblogs.com/nafio/p/9137060.html
Copyright © 2020-2023  润新知