前言:
笔者目前在校本科大三,目标方向是人工智能、计算机视觉。上一个OpenCV学习笔记专栏已完结,在学习完OpenCV后,我继续学习C++,并用纯C++做UE4项目的方式继续提升自己的水平。
梁迪老师的水平非常高,他的课程本来也无需笔记:课程本身即为最好的笔记。但由于我天赋有限,还是边看边记,以防遗忘——知识点太多,步骤太繁杂了。在学习过程中,我也偶有思考,思索为什么某个方法老师要这样做。所以,一是为了记录,二是为了分享,才有了这个专栏。
内容方面,由于我在开启这个专栏时,此项目已经做完很多了。所以,前期的一些大篇幅叙述的知识,可能在后期应用中一带而过。以及,前期的一些知识,后期会重新剖析,并加上我的个人理解。
另外,若有学术交流/学业交流意愿,可以邮件联系1246210283@qq.com,希望一齐进步。
本篇学习内容:
4.关于委托的一些思考
5.菜单布局实现
6.开发UI时,之前出现的各文件的作用(个人理解)
4.关于委托的一些思考
c++没有委托,但是可以实现委托。
通过
#define DECLARE_DELEGATE_RetVal( ReturnValueType, DelegateName ) FUNC_DECLARE_DELEGATE( DelegateName, ReturnValueType )
和
DECLARE_DELEGATE_RetVal(
FReply,
FOnClicked )
有:参数类型:FOnClicked 返回类型:FReply
随后在SButton中有事件:
SLATE_EVENT( FOnClicked, OnClicked )
所以就可以在事件中 绑定Onclicked函数到 xxx函数上 同时传入该Button
如:
SNew(SButton)
.OnClicked(this,&SSlAiMenuHUDWidget::Onclick) //点击这个按钮时,执行绑定的Onclick函数
该xxx函数的返回值是FReply 和委托对应
在本专栏3.修改slot中的实际价值就是,绑定Onclick函数到SButton上,再用该函数通过ImageSlot控制上面的Slot
5.菜单布局实现
在SSlAiMenuHUDWidget.h中创建一个菜单指针
TSharedPtr<class SSlAiMenuWidget> MenuWidget;
在SSlAiMenuHUDWidget.cpp中
SOverlay::Slot()
.HAlign(HAlign_Center)
.VAlign(VAlign_Center)
[
SAssignNew(MenuWidget,SSlAiMenuWidget)
]
这是创建Slate Widget的第二种方法
随后在SSlAiMenuWidget中实现菜单布局,代码基本与之前SSlAiMenuHUDWidget的类似。
6.开发UI时,之前出现的各文件的作用(个人理解)
在文件中创建了MenuWidget、MenuHUDWidget、MenuWidgetStyle、Style
MenuHUDWidget统筹整个布局,属于底层。
MenuWidget用于实现菜单布局,被包含于MenuHUDWidget的Childslot下。
MenuWidgetStyle中可以创建各种笔刷,来添加到Childslot中;同时,MenuWidget和MenuHUDWidget需要创建MenuWidgetStyle实例
const struct FSlAiMenuStyle *MenuStyle;
然后在cpp文件中获取编译器的MenuStyle
MenuStyle = &SlAiStyle::Get().GetWidgetStyle<FSlAiMenuStyle>("BPSlAiMenuStyle");
获取编译器的MenuStyle由Style文件来完成
Style准备了多种函数,包括初始化、得到类型名、关闭、得到Slate类型等