天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟

标题: UI编辑器案例:控件坐标系 [打印本页]

作者: 提百万    时间: 2020-11-18 01:33
标题: UI编辑器案例:控件坐标系
1. 需求

1. 找茬界面是一个局部界面,点击找茬npc的模型交互按钮打开这个界面;
2. 点右边的图的正确的位置,显示圈;
3. 点到非正确的位置,显示叉,叉在2秒后自动隐藏;

2. 拼界面

按照惯例,还是先把界面拼好。

2.1 底板、关闭按钮、阻挡层

和之前的非全屏界面一样,需要配置底板、关闭按钮和阻挡层,因为和之前的拼法都一致,这里就不再赘述了。

2.2 界面区域`panel_range`

这里的界面区域要特别注意一下,尺寸x和尺寸y要用数值来填写,不要用百分比。



因为找茬的图片资源都是固定尺寸的,基于此性质我们的`panel_range`的尺寸也要填数值,否则界面的适配会比较奇怪。

2.3 左图与右图

然后把左图和右图贴到界面区域里就可以了。这个就非常简单了,不再贴图了。

2.4 错误区域`lyr_touch`

然后我们拼一个层盖住左图和右图,只要玩家点到了这个层,我们都认为他点到了错误的地方。



2.5 正确区域`lyr_answer`与正确的圈`spt_answer`

接下来就是一个一个地把正确的区域放到`lyr_touch`里面就可以了。注意正确的区域要吞噬点击事件,这样点到了正确区域就不会点到错误区域。`spt_answer`默认隐藏。



然后命名一定要规范,`lyr_answer_x`的对应圈必须为`spt_answer_x`,这样一来我们后面写逻辑就非常方便了。详见后面的实现部分。

2.6 错误的叉`spt_wrong`

最后再在`lyr_touch`下拼一个图片,图片资源为叉,默认隐藏即可。



3. 界面逻辑实现

3.1 点击位置正确的回调

只需要一个触发器就能完成,将这个触发器注册到所有`lyr_answer`的点击事件下。触发器内容也很简单,一行就能完成。



原理是:我们的控件命名都是规范的,`lyr_answer_x`的对应圈必为`spt_answer_x`。因此当玩家点击到位置正确的区域时,触发控件的名字就是`lyr_answer_x`,把这个名字中的`lyr`替换为`spt`就找到了这个区域对应的圈,将这个圈从显示状态变为隐藏状态即可。

3.2 点击位置错误的回调

终于到了这次最重要的内容了,因为只有这个地方用到了坐标系坐标转换的内容。

这里要实现的东西其实很简单,就是当玩家点击位置错误时,把叉显示到这个地方。但是这里需要注意,我们利用的是`lyr_touch`的点击事件,点击之后将`spt_wrong`显示在点击的位置上。而`spt_wrong`是`lyr_touch`的一个子节点,所以当我们设置`spt_wrong`的位置时,所设置的都是相对于`lyr_touch`的位置。但点击事件中可使用的『触发界面坐标』参数,是相对于世界坐标系的界面坐标,因此我们需要将『触发界面坐标』转换为相对于`lyr_touch`的坐标,也就是下图这个参数:



因为这个事件下『触发控件』就是`lyr_touch`,所以我们直接将触发界面坐标转换为相对于触发控件的坐标即可。

然后再将转换出来的值用来设置`spt_wrong`的位置,即可完成。



这里顺带插一句,如果要将相对于某个控件的坐标(控件坐标系下的坐标)转换为世界坐标系下的坐标,也就是上述转换过程的逆过程,也是可以实现的,只需要使用下图参数:







欢迎光临 天工维度魔兽争霸开发者社区-全国最大的TJ集中营-原提百万联盟 (http://bbs.mvprpg.com/) Powered by Discuz! X3.4