UDN
Search public documentation:

CLIKINIListCH
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

UE3 主页 > 用户界面 & HUD > Scaleform GFx > 如何从一个ini文件中填充一个列表

如何从一个ini文件中填充一个列表


概述


在ActionScript(动作脚本)中填充一个滚动列表,或者下拉列表等非常简单。 假设您已经有带有“dropDownList”实例名称的下拉菜单,只要使用"dataProvider(数据供给器)"属性来填充这个列表。

ActionScript
dropDownList.dataProvider = ["row1", "row2", "row3", "row4", "row5", "row6", "row7", "row8"];

但是在大多数情况下,您要通过UnrealScript(虚幻脚本)来动态填充您的列表。 这很简单。

INI文件


我们会通过一个UDK配置文件来填充我们的列表,特别是DefaultUI.ini。打开那个文件并将以下内容添加到底部。 (注意: 我们假设这个包含您下拉菜单的类为SFMenuTutorial):

[UTGame.SFMenuTutorial]
+ListOptions=(OptionName="Option 1",OptionLabel="Cool",OptionDesc="Something cool.")
+ListOptions=(OptionName="Option 2",OptionLabel="Awesome",OptionDesc="Something awesome.")
+ListOptions=(OptionName="Option 3",OptionLabel="Amazing",OptionDesc="Something amazing.")

每行代表在列表中的一个选项。

OptionLabel(选项标签)会在列表中显示。 其他的项是可选的。 只要您将它们用逗号分隔开,它就可以在每行中包含和您希望一样多的项。

Unrealscript(虚幻脚本)


现在,在您包含下拉滚动菜单列表的UnrealScript(虚幻脚本)文件中(我的叫做SFMenuTutorial),请确保在配置声明中包含了用户界面文件。 基本上这就是不包含"Default(默认)"部分的的配置文件的名称。 在"DefaultUI.ini"事例中,只象以下说明那样使用"UI"

Unrealscript
class SFMenuTutorial extends GFxMoviePlayer
  config(UI);

下一步,我们声明一些重要的变量。 第一个变量用作在Flash中针对真实下拉滚动列表的引用。 接下来是一个结构体 - 每个在列表中的选项由三个字符串变量组成。

Unrealscript
/** The drop down menu */
var GFxClikWidget DropDown;

/** Structure which defines each option in the list. */
struct Option
{
  var string OptionName;
  var string OptionLabel; // This will be displayed in the list.
  var string OptionDesc;
};

然后我们声明这个结构体类型(选项)的数组,它会存放在DefaultUI中的每个所定义的选项。 这个数组在"var"关键字后面添加了"config"关键字,它用来说明这个数组的数据是在config文件中找到的。 我们所要的数据在那个config文件中(如上所示)任何命名为ListOptions(列表选项)的行的项中找到。

Unrealscript
/** Aray of all list options, defined in DefaultUI.ini */
var config array<Option> ListOptions;

然后,假设这个在Flash中的下拉列表已经有一个"dropDownList"的实例名的情况下,我们初始化该下拉列表。

Unrealscript
event bool WidgetInitialized(name WidgetName, name WidgetPath, GFxObject Widget)
{
  switch(WidgetName)
  {
  case ('dropDownList'):
    DropDown = GFxClikWidget(Widget);
    SetUpDataProvider(DropDown);
    break;

  default:
    break;
  }
  return true;
}

请注意,我们执行函数SetUpDataProvider(),将新的"DropDown(掉落)"控件引用为一个参数将其传入。 这个函数在下一步中出现。 我们需要创建一个临时对象(TempObj)来存放在配置文件ListOptions 行中找到的各种选项,并且我们将每个选项在一个叫做DataProvider的数组中存储为一个元素对象。 然后将我们选项对象的那个数组分配到使用SetObject(设置对象)的下拉菜单的"dataProvider(数据供给器)"属性。

Unrealscript
function SetUpDataProvider(GFxClikWidget Widget)
{
  local byte i;
  local GFxObject DataProvider;
  local GFxObject TempObj;

  DataProvider = CreateArray();

  switch(Widget)
  {
  case(DropDown):
    for (i = 0; i < ListOptions.Length; i++)
    {
      TempObj = CreateObject("Object");
      TempObj.SetString("name", ListOptions[i].OptionName);
      TempObj.SetString("label", ListOptions[i].OptionLabel); // this will be displayed in the list
      TempObj.SetString("desc", ListOptions[i].OptionDesc);

      DataProvider.SetElementObject(i, TempObj);
    }
  }

  Widget.SetObject("dataProvider", DataProvider);
}

最后,请确保在默认属性中绑定了这个下拉菜单的控件。

Unrealscript
defaultproperties
{
  WidgetBindings.Add((WidgetName="dropDownList",WidgetClass=class'GFxClikWidget'))
}

这些就是全部的工作了!

补遗


对一个下拉列表来说,所显示行的数量会自动变化。 所以您如果有不到5行的选项,比如说3,这个列表将显示3行。 它最多会显示5行,这样在"DropdownMenu.as'类中就很难写代码了,但是这个数值是可以修改的。

对滚动列表来说,您必须手动在虚幻脚本中指定一个rowCount(行的计数),如下:

Unrealscript
MyScrollingList.SetFloat("rowCount",ListOptions.Length);