五、回调函数
回调函数是这样一类函数:它在被设置了打击目标标记的物件击中目标时被调用。
在上面的例子中,我们的箭支被设置为OF_ATTACKENEMY标记,亦即它会同时击中小兵和主将;不论击中的是小兵还是主将,都会触发回调函数机制。之所以没有触发,是因为我们没有设置回调函数。
设置回调函数,需用到SetCallbackProcedure函数:
void SetCallbackProcedure(int object, intcallbackFuncCallsign);
在这里,第一个参数是回调函数对应的物件:当该物件击中目标时触发回调函数。第二个参数是回调函数的调用代码,也即callsign。注意,输入的是调用代码,不能将函数名直接填入参数中。
对应地,回调函数总是应该接受两个参数。参数名没有限制,但必须都为int型;回调函数不应有返回值。第一个参数接收打击目标的物件(在我们的例子中是箭支);第二个参数则接收被打中的物件(主将或士兵的物件)。
我们来实际操作一下。如下是我们创建的回调函数的定义;函数体暂时留空——

接着,为了配置这个回调函数,我们在主函数中,在设置好打击目标标记后,使用SetCallbackProcedure为箭支指定回调函数:

(通常而言,在奥汀的设计中,武将技的“内部函数”(亦即不在magic点ini中由SCRIPT=XXX调用的函数)的调用代码为四位数或五位数,其中,千位和万位的部分是奥汀的武将技“内部编号”,后面则从1开始递增。调用代码的位数有助于区分函数的作用,因此笔者也建议在此类函数上使用五位数的调用代码。在设置好编号后,可以打开magic.cpp按Ctrl+F查询,看看有没有函数已经用过了这个调用代码。不过,即使没有发现代码冲突,也可能会出现无效的情况,原因尚不明确;目前的经验表明,使用五位数的调用代码通常是比较安全的。)
回调函数是这样一类函数:它在被设置了打击目标标记的物件击中目标时被调用。
在上面的例子中,我们的箭支被设置为OF_ATTACKENEMY标记,亦即它会同时击中小兵和主将;不论击中的是小兵还是主将,都会触发回调函数机制。之所以没有触发,是因为我们没有设置回调函数。
设置回调函数,需用到SetCallbackProcedure函数:
void SetCallbackProcedure(int object, intcallbackFuncCallsign);
在这里,第一个参数是回调函数对应的物件:当该物件击中目标时触发回调函数。第二个参数是回调函数的调用代码,也即callsign。注意,输入的是调用代码,不能将函数名直接填入参数中。
对应地,回调函数总是应该接受两个参数。参数名没有限制,但必须都为int型;回调函数不应有返回值。第一个参数接收打击目标的物件(在我们的例子中是箭支);第二个参数则接收被打中的物件(主将或士兵的物件)。
我们来实际操作一下。如下是我们创建的回调函数的定义;函数体暂时留空——

接着,为了配置这个回调函数,我们在主函数中,在设置好打击目标标记后,使用SetCallbackProcedure为箭支指定回调函数:

(通常而言,在奥汀的设计中,武将技的“内部函数”(亦即不在magic点ini中由SCRIPT=XXX调用的函数)的调用代码为四位数或五位数,其中,千位和万位的部分是奥汀的武将技“内部编号”,后面则从1开始递增。调用代码的位数有助于区分函数的作用,因此笔者也建议在此类函数上使用五位数的调用代码。在设置好编号后,可以打开magic.cpp按Ctrl+F查询,看看有没有函数已经用过了这个调用代码。不过,即使没有发现代码冲突,也可能会出现无效的情况,原因尚不明确;目前的经验表明,使用五位数的调用代码通常是比较安全的。)


























