UDN
Search public documentation:
UnrealScriptDelegatesCH
English Translation
日本語訳
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
日本語訳
한국어
Interested in the Unreal Engine?
Visit the Unreal Technology site.
Looking for jobs and company info?
Check out the Epic games site.
Questions about support via UDN?
Contact the UDN Staff
虚幻脚本代理
概述
声明代理
Class Button extends Window; delegate OnClick( Button B, int MouseX, int MouseY );
将代理作为函数参数
在虚幻引擎 3 中,代理可以用作为函数参数。您首先需要按照上面的方式声明一个代理。然后,您可以在函数中像这样来使用该声明的代理:function DoStuff(delegate<OnClick> ClickDelegate) { }当调用这个函数时,与声明的代理具有同样函数声明的函数可以被作为参数传入。例如:
function MyOnClick( Button B, int MouseX, int MouseY ) { } function CallFunction() { DoStuff(MyOnClick); }
调用代理
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 ); }或者使用代理作为函数参数的情况:
function DoStuff(delegate<OnClick> ClickDelegate) { ClickDelegate(Self, MouseX, MouseY); }
分配代理指向一个函数
Class MyDialogBox extends Window; var Button OKButton, CancelButton; function MyClick( Button B, int MouseX, int MouseY ) { if( B == OKButton ) SaveDetails(); CloseWindow(); } event Initialized() { OKButton = CreateWindow(class'Button', 40, 100, 64, 32 ); CancelButton = CreateWindow(class'Button', 120, 100, 64, 32 ); OKButton.Caption = "OK"; CancelButton.Caption = "Cancel"; OKButton.OnClick = MyClick; CancelButton.OnClick = MyClick; }在
Create
的最后两行,它把两个按钮的代理都分配为 MyDialogBox 的 MyClick
函数。当 Button 类的 MouseUp
函数调用 OnClick
代理时,作为替换将会调用 MyDialogBox 的 MyClick
函数。如果没有代理,那么您需要创建 Button 类的子类并实现这个功能。
可替换地,您可以在类的 defaultproperties{}
块中分配代理,如下所示:
DefaultProperties { OKButton.OnClick=MyClick CancelButton.OnClick=MyClick }您也可以把一个代理分配为 None ,这将会导致当调用该代理时,它不会做任何事情。 作为函数参数传入的代理反过来也可以用于在这个类中分配代理属性。
function DoStuff(delegate<OnClick> ClickDelegate) { OKButton.OnClick = ClickDelegate; }
代理和删除的对象
为代理声明代理体
Class Button extends Window; delegate OnClick( Button B, int MouseX, int MouseY ) { Log("This is the default action"); }如果您在
OnClick
delegate(代理)指向 None 时调用这个代理,那么它将执行代理的函数体。当没有分配 OnClick
的值时,您可以使用这个机制来提供默认的动作。