代理是unrealscript中非常重要的课题,关于UI关于Mobile交互都不可或缺,对于CloudPC和IAP部分如果欠缺了这部分的知识常常会与崩溃结缘。
凡是以Actor继承的类都会进行垃圾处理,而Object则不会,恰恰UI部分是以Object继承来的。这意味着,不清空就崩溃!
代理是绑定在object上的函数,他们的主要作用是提供回调,例如在UI系统中通知事件。
1.声明一个代理
Class Button extends Window;
delegate OnClick(Button B,int MouseX,int MouseY); //看看这里完全是为了实现UI而做的类。
2.调用一个代理
class Button extends Window; var int MouseDownX,MouseDownY; delegate OnClick(Button B,int MouseX,int MouseY); function MouseDown(int MouseX,int MouseY) { MouseDownX=MouseX; MouseDownY=MouseY; } function MouseUp(int MouseX,int MouseY) { if(MouseX==MouseDownX&&MouseY==MouseDownY) OnClick(self,MouseX,MouseY); }
3.最重要的,将代理指向一个函数。否则代理就没有实现
通常要实现一个代理,要将其指向一个函数,而这个函数一般不在自己的类中,而这个类中一般要声明一个和代理参数,返回类型一样的函数。
重新定义一个类
class FuckButton extends Window;
var Button OKButton;
function FuckClick(Button B,int MouseX,int MouseY)
{
if(B==OkButton)
SaveDetails();
CloseWindow();
}
event init()
{
OkButton=Create(class'Button',40,100,53,20);
OkButton.OnClick=FuckClick;
}
同样可以在defaultproperties中分配
OKButton.OnClick=MyClick;