🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
</br>要说在太阳神三国杀这游戏中,一个回合里面总共有六大阶段,分别是: 准备阶段;判定阶段;摸牌阶段;出牌阶段;弃牌阶段;结束阶段。 </br>很多技能都在这六个阶段上做文章。比如英魂(准备阶段)、涉猎(摸牌阶段)、琴音(弃牌阶段)、闭月(结束阶段)之类的。 </br>这种以阶段作为发动时机的技能,大多属于触发技,称作阶段触发技。 </br>(孙悟空:我也想要一个阶段触发技!编者:身在福中不知福……) </br>其实最早我们为孙悟空创造的那个强力摸牌技能"美王"就属于这种阶段触发技。下面我们来仔细分析一下美王的代码,看一看怎样创造一个阶段触发技。 ![](https://img.kancloud.cn/47/8a/478a5d165083ce58a43b278fe7f621f4_789x571.png) </br>跟所有触发技一样,阶段触发技也是通过套用CreateTriggerSkill创建技能的模板创造的。只是它的触发时机是具体的阶段时机了。 跟阶段有关的触发时机有: 1. sgs.TurnStart(回合开始前) 2. sgs.DrawNCards(摸牌阶段摸牌时) 3. sgs.EventPhaseStart(阶段开始时) 4. sgs.EventPhaseEnd(阶段结束时) 5. sgs.EventPhaseChanging(两个阶段之间的时间点) </br>可以看到,回合开始阶段和摸牌阶段有自己专用的触发时机,美王就是将摸牌阶段摸牌时的sgs.DrawNCards作为自己的触发时机的。 </br>然而另外四个阶段该怎么办呢? </br>原来,一个阶段内又包扩两个更细小的触发时机,分别是刚进入这个阶段的阶段开始时机sgs.EventPhaseStart,以及即将离开这个阶段的阶段结束时机sgs.EventPhaseEnd。 </br>所以,如果我们说“XX阶段开始时……”,所用的触发时机就是sgs.EventPhaseStart;而如果我们说“XX阶段结束时……”,就该使用sgs.EventPhaseEnd作为触发时机了。 </br>那么怎么区分具体是哪个阶段呢? </br>不要紧,那个Player为我们提供了一个查看当前阶段的成员函数,那就是`getPhase`。它的原型就是:`getPhase()`。 ![](https://img.kancloud.cn/6d/24/6d249a7e4ec3578c5da00677313ad46e_234x26.png) </br>这个函数的返回结果,列在下面了: 1. 回合启动阶段:sgs.Player_RoundStart(准备进入回合,遇翻面则跳过回合) 2. 准备阶段:sgs.Player_Start(观星、英魂等可以发动) 3. 判定阶段:sgs.Player_Judge(延时性锦囊判定;鬼才、鬼道等可以发动) 4. 摸牌阶段:sgs.Player_Draw(英姿、神威等可以发动) 5. 出牌阶段:sgs.Player_ Play(大多数主动技能可以发动) 6. 弃牌阶段:sgs.Player_Discard(琴音等可以发动) 7. 结束阶段:sgs.Player_Finish(闭月、据守等可以发动) 8. 回合外:sgs.Player_NotActive(大多数被动技能可以发动) 9. 阶段间:sgs.Player_PhaseNone </br>所以如果说“弃牌阶段……”,所用的触发时机为sgs.EventPhaseStart,并且在触发效果`on_trigger`中进行判断,查看`player:getPhase() == sgs.Player_Discard`是否满足就行啦。 </br>代码片段: ![](https://img.kancloud.cn/78/fe/78fe4adfdaf101dcc11732af68ef6145_614x150.png) </br>这样我们就明白了,美王就是这样的一种阶段触发技能。(编者:悟空,你顿悟吧!)