UDN
Search public documentation:

GFxSplitScreenCH
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 > 怎样处理分屏

怎样处理分屏


概述


GFx3.3引进了焦点组和分屏的扩展功能,所以我最终将针对该扩展功能发布一个一个教学视频,但是现在有些信息可能会对您有所帮助:

这个新的焦点组扩展功能将单个视频实例放在分屏里,使离线多人游戏成为可能。 GFx3.3同样也可以创建多达16个焦点组,并提供一个接口针对一个焦点组制定一个特定的控制器。 默认所有控制器属于焦点组0。

使用了选项setControllerFocusGroup,您就可以将一个控制器分配到一个新的焦点组。

GFx3.3同样引进了焦点组蒙版的概念,它使用了一个新的叫做focusGroupMask的扩展。 一个焦点组蒙版是一个16位数值(0000 0000 0000 0000),在每个位上代表了那个索引里的焦点。 比如,0位代表0组,1位代表1组,2位代表2组,以此类推。 Bit 0(0位)是离右边最远的位,而bit15(15位)是离左边最远的位。 MovieClip.focusGroupMask(焦点组蒙版)扩展功能只需通过翻动0和1位来查看某个视频剪辑属于哪个焦点组。

将Controllers(控制器)分配到Focus Groups(焦点组)


在这里的第一个部分,我们将玩家1(第一玩家)设置到焦点组0中,现在请记住所有的控制器的索引都是0,所以第一个控制器实际上是控制器0,而不是控制器1;然后我们将玩家2的控制器设置到焦点组1中。

// Set up two focus groups

Selection.setControllerFocusGroup(0, 0);   // controller id 0 set to focus group 0
Selection.setControllerFocusGroup(1, 1);   // controller id 1 set to focus group 1

设置初始视频剪辑焦点


以下的第一个例子将myMovieClip1的焦点设置到十进制数值1,同二进制中的0001是相同的,这是一个CLIK特定方式表现焦点组0的方法。

例子2使用一个普通方法(setFocus选项)。 在这个使用普通方法的例子中,您没有使用焦点组蒙版,而是用控制器索引作为第二参数。 玩家2的控制器索引是1。

//Set initial focus

myMovieClip1.myButton1.focused = 1; // 0x1 - clik specific
Selection.setFocus( myMovieClip2.myButton1, 1 ); // non clik specific (generic)

将视频剪辑锁定到Focus Group(焦点组)


现在我们将每个视频剪辑和它的子类锁定到一个特定的焦点组中,这意味着只有属于那个焦点组的控制器可以访问那个视频剪辑。

// Lock each movie clip to a specific focus group using a decimal value

panel1s.focusGroupMask = 1; // hex 0x1 - binary 0001
panel2s.focusGroupMask = 2; // hex 0x2 - binary 0010

所有控制器都可以访问任何没有分配到焦点组的视频剪辑。 并且您甚至还可以让多个控制器使用focusGroupMask(焦点组蒙版)访问一个视频剪辑。

只需知道位图蒙版的十进制数值就能让玩家1和玩家2的控制器访问一个给定的视频剪辑。 所以控制器0要获得访问权限,我们需要把0位调到1位,如果控制器1要获得访问权限,我们需要把1位调到1位;这样我们就得到了一个二进制数值0011,这个二进制数值转换成十进制就是3。

如果您不知道二进制和十进制的换算,在网上有很多免费的换算网站。

所以结果是我们将myMovieClip.focusGroupMask(焦点组蒙版)设置为3,让控制器1和2都能访问它。

焦点指示图形


CLIK支持Button(按钮)和类似按钮的元素,比如复选框和单选按钮。 所有的焦点组默认会使用和先前一样的指示图形。 在一个元素内,您可以在时间轴上看到focusIndicator layer(焦点指示图形层)。 这个焦点指示是一个带有focusIndicator实例名称的视频剪辑。

向下拉进入focusIndicator(焦点指示) 在那里应该有一系列的关键帧。 从第一帧开始,在页面上就不应该再有图形了。 这个帧需要有一个状态0(state0)的标签分配给它。 这个帧意味着没有焦点组。 换句话说,如果玩家没有通过他的控制器选中这个元素,它就会在这个帧上显示。 在时间轴上向右移动一帧,下一个关键帧应该标记为state1(状态1)。 这个关键帧需要图形表现玩家1的控制器或控制器0,并且这个帧是用来说明玩家1已经用他的控制器选中了这个元素的。 在标签 state1(状态1)中的1代表了焦点组0的位屏蔽十进制数值,它分配给控制器0。

掠过其他的帧,下一个关键帧应该有针对玩家2控制器或玩家1的图形了。并且针对该帧的标签应该是state2(状态2)。 所以在这里需要理解的是,每个帧必须要有一个stateN(状态N)的标签,N必须有一个合适的焦点组位屏蔽的十进制数值代替N。 当然,每个帧上都要有一个停止actionscript(动作脚本)的命令。

接下来的帧应该标记为state3(状态3)。 它应该有一个针对玩家1和玩家2控制器的图形。 请记住,十进制数值3转换成二进制是0011,这说明0和1位会翻转到on(打开)(或者1),所以当玩家1和玩家2控制器都聚焦于那个元素时,state3(状态3)显示聚焦。 您要为每个可能的焦点控制器组合创建关键帧,您希望每个可能的焦点控制器有一个特定的用户界面元素来处理。 您可以添加state4,state5,state6等关键帧,每个都代表一个不同的控制器或控制器组合在用户界面元素上有聚焦。