三国群英2吧 关注:45,932贴子:1,015,590

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

只看楼主收藏回复




IP属地:中国香港37楼2020-03-21 01:02
回复
    附录:完整的伏兵流程
    为了将重点更多放在三国2脚本的语言特性上,笔者有意简化了伏兵的武将技代码。真正执行伏兵时,需要额外考虑一些其它的问题:
    1. 武将当前还有多少兵,加上伏兵数后,判断是否超出兵数上限;
    2. 如果召唤伏兵的位置已经被占据,需要往下一个位置顺延,避免伏兵被阻挡;
    3. 当兵满还要招兵时,需要召唤天降铁锅。
    这部分我们将引入以下系统函数,用于获得主将等级和士兵数:
    int GetMajorLevel (int isLeft);
    int GetSoldierCount (int isLeft);
    以及以下magic点cpp已定义函数,用来召唤铁锅:
    void CastFail (int majorHandle, int nDir);


    IP属地:中国香港本楼含有高级字体38楼2020-03-21 04:47
    回复
      2026-01-19 08:47:47
      广告
      不感兴趣
      开通SVIP免广告
      首先,我们先解决伏兵人数的问题。我们用GetMajorLevel和GetSoldierCount两个函数得到目前还能增加的兵数,然后,判断目前是否满兵;如果满兵则召唤铁锅,否则,往下执行MoreSoldierFrontBack函数。


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


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

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


          IP属地:中国香港41楼2020-03-21 04:57
          回复
            请问楼主大大 我想用你的方法组合八门金锁加鬼戟 如何入手呢


            IP属地:日本来自iPhone客户端42楼2020-03-21 18:40
            回复
              把两个武将计,天黑和天亮之间代码取出来,放一个新武将计里面,OVER


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


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