|
楼主 |
发表于 2011-7-5 00:12:26
|
显示全部楼层
使用覆盖的方法重置UI有什么缺陷呢?很明显就是,界面即使重置,它的位置在游戏内依然不能动态修改,所以如果我们想要将窗体元素随心所欲的移动和隐藏时,就需要使用第二种方法了。即使用模板来创建对话框项。
具体的方法,可以看头目的这个演示,http://bbs.islga.org/read-htm-tid-53049-page-1-fpage-1.html
各个模板的路径是什么呢?大家可以在GameUI.SC2Layout中查看各窗体元素的template属性,下面我以创建一个CommandPanel(技能按钮栏)为例。它的模板路径为“CommandPanel/CommandPanelTemplate”。
不要偷懒,还不会创建对话框项模板的童鞋,务必按照链接中头目的演示自己制作一下,在屏幕的中央显示一个CommandPanel界面,不然看下去就没有意义了。
好的,如果成功了的话,咱们就可以继续了,我就偷懒不制作兼截图啦(拍飞...其实是LZ想偷懒)。将CommandPanel独立创建出来以后,大家可能会觉得如果把他们摆成一条直线会比较好看一点,那么如果制作呢?
1,在UI\\Layout\\UI文件夹中复制一份CommandPanel.SC2Layout出来,我们要修改它,完成之后我们要将其导入到地图中去,路径即为UI\\Layout\\UI。
2,打开CommandPanel.SC2Layout文件,我们看到的就是CommandPanel的模板了,里面的CommandButtonXX按钮数一数是不是正好是15个呢?没错了,它们就是技能栏的按钮,如果要将它们排列成一个直线应该如何操作呢?
按照上一贴的方法就可以了,完全一样的。
3,修改完之后,记得导入CommandPanel.SC2Layout文件,并且将路径设置正确,运行地图看一看是否修改成功了,因为这修改方法依然是上一贴的内容,所以我就不在此方法文档和截图了,这个需要大家自己来练习一下了。
我们来总结一下,这个方法需要用到触发器,使用正常的流程来创建自定义窗体元素,然后在某个Dialog或者Panel内使用模板创建一个窗体元素。需要用到的是以下两个函数:
native int DialogControlCreateFromTemplate (int dialog, int type, string inTemplate);
native int DialogControlCreateInPanelFromTemplate (int panel, int type, string inTemplate);
好了,如果对上面的流程十分熟悉了的话,那么我想问大家一个问题,我们刚才创建的以“CommandPanel/CommandPanelTemplate”为模板的窗体元素,其父窗口是哪个?
这个答案大家不需要要在GameUI.SC2Layout中寻找,而是要在触发器中寻找,意思就是如果使用上面的两个api创建了该模板元素的话,其父窗口就是对应的Dialog或Panel。如果你想更精确的知道你所创建的窗体元素的性质时,请务必记得这一点。 |
|