三国群英2吧 关注:45,963贴子:1,015,959

回复:【脚本基础教程】第五章:摄像机与标记(武将技:前后伏兵)

取消只看楼主收藏回复

首先,我们先解决伏兵人数的问题。我们用GetMajorLevel和GetSoldierCount两个函数得到目前还能增加的兵数,然后,判断目前是否满兵;如果满兵则召唤铁锅,否则,往下执行MoreSoldierFrontBack函数。


IP属地:美国39楼2020-03-21 04:51
回复
    其次,我们需要考虑召唤伏兵的位置被已有士兵或主将占据的问题。在这里我们采取以下策略:我们从底线中点处开始检查每一个位置。我们先检查战场偏上的位置,接着检查与之对称的位置;如此反复向战场上下两侧“跳跃”,查找可以招兵的位置,直到检查完一列内所有12个位置为止,然后进入下一列。只要有可以招兵的位置,就立即招兵,如果被阻挡就跳过,直到把该招的兵招完为止。
    具体代码如下:


    IP属地:美国40楼2020-03-21 04:52
    回复
      2026-01-29 11:24:23
      广告
      不感兴趣
      开通SVIP免广告
      入口函数不变;MyStepShow函数也不变。(直接调用奥汀写好的StepShow函数也可以。)
      编译运行。可以看到,现在程序可以自动识别剩余兵数,并且能够避开已被占据的位置:第一次前后伏兵在两侧各召唤了25兵,第二次前后伏兵在两侧分别召唤了12、13兵。

      注:写法和奥汀在magic点cpp中的ProduceSoldier函数不同。原因很简单:大多数情况下,奥汀的武将技代码写得真的很烂……


      IP属地:美国41楼2020-03-21 04:57
      回复
        @达霁霸
        @hopecolor2 兄说的是可以的,但是这样执行的结果可能未必是你想要的效果。其中一个主要问题是,你希望整个武将技过程中摄像机跟随谁,以及这两个武将技如何执行。
        为简单起见,假设你希望摄像机始终跟随鬼戟,鬼戟飞行过程中八门金锁同时施放。此时你需要做的是:
        1. 复制八门金锁的代码,把八门金锁的武将技准备阶段和结束阶段内容删去(参考第四章第三节),并同时删去所有摄像机相关代码,放在一个单独的函数中;如果八门金锁间接调用的函数中包括摄像机相关代码,则这些函数也要复制一份,删去摄像机相关代码。
        2. 组合技的主函数和鬼戟相同,但在掷出鬼戟之前(或者别的什么时机),使用asynccall异步调用八门金锁部分的单独函数;
        3. 在主函数结束阶段之前,添加wait语句,等待所有八门金锁相关的函数执行完毕,确保武将技不会在八门执行完毕前就提前结束。
        另一种情况是,你希望先掷出鬼戟,然后摄像机对准八门金锁;这种情况下应该删去鬼戟武将技中的LockCamera之类的函数调用,阻止摄像机锁定鬼戟。接下来的事情和上面的2、3两点相同。
        总之,根据不同的摄像机策略,代码的编写也会有所不同,但大部分都还是复制粘贴的,唯一需要调整的只是摄像机部分,以及两个武将技的并行执行。asynccall和wait的内容可参考第六章。


        IP属地:美国44楼2020-03-22 04:56
        收起回复