1. 需求 1. 界面中可以显示队友的信息; 2. 每名队友的信息包括主控单位头像、队友名称、交互信息; 3. 交互信息包括点赞、修改备注名; 2. 拼界面 按照惯例,还是先把这个需求的界面拼好。 2.1 入口按钮界面 队友信息界面并不是一个常驻界面,所以我们先来做一个入口按钮。 入口按钮很简单,就是一个普通的按钮,比较难在如何定位这个按钮的位置。这里我设计的是将按钮显示在小地图右边、网络延迟信息的下方,难点在于我们现在不知道官方的小地图是如何适配的(即不知道小地图的控件大小是多少)。我这里用的方法是:在设计分辨率(1334 * 750)下进入战斗,用截图工具量出我需要定位的点到客户端左下角的距离,并将这个距离写在入口按钮的定位属性中。 这个方法在大多数情况下都是稳的,之后我们也会提供官方的战斗一级界面的具体定位信息,帮助大家通过UI编辑器拓展战斗中的一级界面。 2.2 队友信息主界面 接下来我们来拼队友信息的主界面。 2.2.1 吞噬点击事件的阻挡层`lyr_forbid_touch` 队友信息界面并不是一个全屏界面,因此非界面区域需要有一个阻挡层吞噬点击事件,避免该界面下方的对象响应点击事件。 2.2.2 界面区域`lyr_panel_area` 然后拼一个界面区域的层放在**,之后的节点都放在这个界面区域中。 2.2.3 背景图片`spt_bg` 同样的,给界面来个背景图片,用一个九宫缩放的图片即可。 2.2.4 关闭界面按钮`btn_close` 这个界面打开后还需要可以被关闭,要拼一个关闭界面的按钮。 2.2.5 空状态提示`lb_default_tips` 玩家可能没有队友,所以要拼一个空状态的提示,默认隐藏。 2.2.6 队友信息列表及其列表项 终于到了这次的重点:列表和列表项。 列表UI编辑器中一种相对复杂的控件,类比到触发器的话,列表就是一个数组。数组大家应该比较熟悉,数组是由多个对象按某种顺序排列起来的,我们可以获取整个数组,也可以获取数组中的某一项,改变数组的大小等等。同样的,列表就是有多个列表项所构成的,列表也有大小、其大小也可以被改变,列表中的每一项就是一个列表项。列表项可以很简单(比如一个按钮、一张图片),也可以很复杂(本文示例)。 无论列表还是列表项,在UI编辑器中都是一种控件。 在这个需求中,玩家的队友可能有多个,但是每个队友需要显示的信息又是类似的,因此我们就用到了列表和列表项。 这里,我们拼一个垂直滚动列表,作为队友的信息显示列表。 然后开始列表项的拼接。我们这里的列表项相对复杂,每一个列表项需要显示如下信息: 1. 主控单位头像; 2. 队友名字; 3. 队友备注名; 4. 点赞按钮; 5. 修改备注名按钮; 由于列表项比较复杂,因此列表项根节点的配置非常关键。列表项根节点的配置决定了列表项在列表中的显示大小。对于垂直列表,列表的『尺寸x』是不能编辑的,因为垂直列表的『尺寸x』是由列表项的尺寸x、列数、水平边距、水平间距这4个因素共同决定的;对于水平列表,列表的『尺寸y』是不能编辑的,因为水平列表的『尺寸y』是由列表项的尺寸y、行数、垂直边距、垂直间距这4个因素共同决定的。 由于我们的列表占满了整个界面,所以我们的列表项根节点也需要配置对应的尺寸。 同样的,我们给列表项来个底板,用九宫图片。 然后是主控单位头像部分,由于单位头像的资源没有边框不好看,所以我们采用一个边框底板套单位头像的拼接方式。 接下来的就是两个文本和两个按钮分别对应队友名字、队友备注名、点赞按钮、修改备注名按钮,这些都很简单,就不再赘述了~ 2.3 修改队友备注名界面 最后是修改队友备注名的界面,整体拼法挺简单的,思路和上面的类似,这里就不在详述了,这里就展示一下控件树吧~ 3. 界面逻辑实现 这个界面整体逻辑挺好实现的,比较复杂的在于列表和列表项的部分,因此本文着重说明列表和列表项在触发器中的使用方法。 3.1 使用触发器设置列表项数 通过触发器动作:控件-设置列表项数,完成列表项数的设置,将列表的大小设置成我们需要的大小。例如本文的示例中,我们需要将列表的大小设置为触发玩家的队友的个数。 3.2 遍历列表 在触发器中遍历列表可以有很多种方法,例如: - 通过触发器函数:整数-列表大小,获取列表的大小,然后用整数循环1到列表大小,完成列表遍历; - 通过触发器函数:数组-列表内的所有列表项,获取列表中的所有列表项,得到一个控件的数组,然后遍历这个数组,完成列表遍历; 遍历数组有很多种方法,通常在遍历列表项时,我们可以使用触发器动作:循环-枚举遍历数组,完成控件数组的遍历。因为在遍历列表时,通常都会想要直接获取到这个列表项及其索引值,而这个枚举遍历数组的动作,恰恰可以满足这个需求。 注意,在上面的这个循环中,`teammate_info`这个控件,我们获取到的是每个列表项的根节点。 如果采用整数循环的形式遍历列表,可以通过触发器函数:控件-获取列表项,获取对应索引值的列表项,如下图所示。 注意,在上面的这个函数中,第一个参数必须是一个列表,不能是其他类型的控件,否则属于错误的使用。同样的,这个函数的返回值是列表项的根节点。 3.3 获取列表项的子节点 在遍历列表项的过程中,我们获取到的是列表项的根节点,但我们需要操作的一般都是列表项的子节点,例如本文示例中,我们要修改每个列表项的图标时,需要获取的是每个列表项的`spt_unit_icon`节点,获取到该节点后设置其图片。 此时,我们可以使用触发器函数:控件-列表项指定名字子控件,如下图所示。 使用这个函数时,需要注意以下几点: 1. 第一个参数必须是列表项,或者说第一个参数必须是列表项的根节点,否则属于错误的使用; 2. 这个函数的返回值是某个列表的某一项的某一个子节点; 根据我们的经验,这个函数经常会出现以下这种错误的使用: 这种错误常常出现在这种情况下:在非遍历列表时,想要直接获取某个列表项的子控件的时候。 初学者通常很难发现这个错误,这里介绍一种简单的方法来帮助初学者排查这个错误。如果你在使用这个函数的过程中遇到了触发器报错:『列表项指定名字子控件』中的控件参数不是列表项,那么你可以参照以下3点对着你的函数进行检查: 1. 函数中是否包含列表信息; 2. 函数中是否包含索引值信息; 3. 函数中是否包含子控件名信息; 要获取列表项中的子控件,以上3条信息缺一不可(列表项的子节点是:某个列表的某一项的某一个子节点,3个『某』)。在这个错误的示例中,显然我们缺少了索引值信息,所以找不到对应的子控件。正确的获取方法如下图所示。 3.4 获取列表项在列表中的索引值 在列表的实际实现过程中,我们也会遇到这样的问题:想要直接获取列表项在列表中的索引值。 例如本文示例中,在实现『点赞』按钮的功能时。点赞功能中,点击按钮事件触发时,我们可以获得发起事件的按钮,即『触发控件』,此时我们需要知道触发玩家是给哪个队友点的赞,因此我们需要知道这个触发控件具体是在列表的第几个列表项中,即列表项在列表中的索引值。 此时,我们可以使用触发器函数:整数-列表项在列表中的索引值,如下图所示。 使用这个函数时,需要注意以下几点: 1. 第一个参数必须是列表项,或者说第一个参数必须是列表项的根节点,否则属于错误的使用; 2. 这个函数的返回值是某个列表项的索引值; 在本文示例中,我们的『触发控件』是列表项的一个子控件,因此我们需要使用另一个触发器函数:控件-控件的父控件,获取触发控件所在的列表项。在这个例子中,控件的父控件是列表项的根节点,也就是列表项本身了。 如果你的触发控件在列表项中的嵌套结构比较深,可以多用几次控件的父控件,直到找到你的列表项根节点为止。 |
欢迎光临 天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟 (http://bbs.mvprpg.com/) | Powered by Discuz! X3.4 |