|
本帖最后由 rubik 于 2015-12-28 21:27 编辑
常见的presentation都是展现特定的界面,里面的元素都是固定的。但也有特殊的presentation,其元素是变化的,甚至整个presentation是围绕这个元素开展的,比如兵种升级树界面,这个变化的元素就是阵营的ID,这个presentation相当于是以阵营为参数的presentation。
module_scripts.py里的script是有直接的参数,通过store_script_param_1,store_script_param_2等来直接设定和调用,各种触发器也有相关的操作符:store_trigger_param_1,store_trigger_param_2等。 presentation里也有参数,因为本质上,presentation就是由几个触发器组成的,但我们要的参数并不是触发器的参数,而是以presentation描述的对象为参数的参数。
相关的例子有带参数的菜单,都是以notification_开头的,里面就有两个全局变量作为来参数:"$g_notification_menu_var1"和"$g_notification_menu_var2",所有的notification_开头的都共用这两个全局变量形式的参数。我们可以仿照这个方法,给presentation也增加2个全局变量作为参数:"$g_prsnt_param_1"和"$g_prsnt_param_2"。很多时候,只需要用一个,就只用"$g_prsnt_param_1"就行了。把变化后的参数赋值到"$g_prsnt_param_1",再重新加载presentation,就可以实现带参数的presentation,关键是共用2个全局变量形式的参数。
当然,"$g_prsnt_param_1"和"$g_prsnt_param_2"是很抽象的。具体使用的时候,要赋值到一个变量名字有可读性的局部变量再用,而不是直接把"$g_prsnt_param_1"和"$g_prsnt_param_2"拿来用,那就失去了参数的意义,代码的可读性也很差。以上面提到的兵种升级树界面为例,参数为阵营ID,那么在ti_on_presentation_load这个触发器的头部,就加入一行:
(assign, ":selected_faction", "$g_prsnt_param_1"),
这样就让presentation的参数1("$g_prsnt_param_1")变得可读了,然后ti_on_presentation_load这个触发器内部都可以直接拿":selected_faction"来写了。
这一行代码的作用,完全类似于module_scripts.py里的:
(store_script_param_1, ":selected_faction"),
只是受机制的限制,导致外在形式不一样。
当然了,局部变量的有效范围仅仅限于它所在的那个[ ]范围内,所以在一个presentation另外一个触发器里,比如ti_on_presentation_run里面:
(assign, ":selected_faction", "$g_prsnt_param_1"),
这一句又要再写一遍。
带参数的presentation,其参数"$g_prsnt_param_1"和"$g_prsnt_param_2"一直不变的话,那就失去了带参数的意义了。而presentation参数里的对象ID变化一般都在ti_on_presentation_event_state_change里进行,当然也有在ti_on_presentation_mouse_press或者ti_on_presentation_run里进行的。 参数的变化,说白了也是赋值,把变化后的对象ID赋值到"$g_prsnt_param_1"和(或)"$g_prsnt_param_2"里。比如:
(assign, "$g_prsnt_param_1", ":selected_faction"),
然后再重新载入presentation。
想以前,我在有些presentation里都是用"$temp","$temp_2"来作为参数的。而且就这样直接用,不赋值到名字可读的局部变量里来使用。而对于有些presentation,则是每个presentation都新建一个名字可读的全局变量来作为参数。 两下一合计,就想出了这种共用2个全局变量作为带参presentation参数的方法。 |
|