Project1

标题: 设置释放连击技能时连击的时间间隔@wait_count = XX命令为啥... [打印本页]

作者: taeckle    时间: 2019-4-28 11:30
标题: 设置释放连击技能时连击的时间间隔@wait_count = XX命令为啥...
本帖最后由 taeckle 于 2019-4-28 11:38 编辑

在第100号状态下当自身蓝小于最大值的一半时25%几率触发的对敌人群体造成2*500的伤害:

     if self.state?(100) && self.is_a?(Game_Actor)  && self.sp <= self.max.sp/2 && rand(100) <= 24
       for enemy in $game_troop.enemies
        if enemy.hp > 0
        enemy.hp -= 500
        enemy.damage =  500      
        enemy.damage_pop = true     
        @wait_count=100
        enemy.hp -= 500
        enemy.damage =  500      
        enemy.damage_pop = true         
       end
      end
    end

①我想让这两下500点伤害之间直接停顿个5秒种,可貌似这个@wait_count = 100 无效啊。。
②那个大地图命令等待XX帧命令是command_106,那等待100帧的命令该怎么写啊?command_106(100)???
作者: KB.Driver    时间: 2019-4-28 11:56
因为你不懂脚本的并行处理
你用顺序执行的方法把数值传递一口气做完了,当然不可能有时间去刷新画面。
要想分开显示就要用状态机的方法修改update的行为

另外,你对Game_Interpreter的研究不够啊。
command_xxx方法很明显不需要接收参数,它们是依据Game_Interpreter内部的@params做出行为的
因此你要等待的话,应该找到当前场景(Scene_Battle)的Game_Interpreter实例然后在里面手动赋值@params再来调用command_106
说的直白一点,这个实例就在$game_troop里。

所以你要等待的话,应该找到$game_troop的interpreter,将它的params[0]设置为等待帧数,然后调用它身上的command_106

还有一种简单但破坏性强的方法,直接看command_106里的实现,然后自己把代码复制过来,将里面的@params改成你用的值

作者: taeckle    时间: 2019-4-28 11:58
KB.Driver 发表于 2019-4-28 11:56
因为你不懂脚本的并行处理
你用顺序执行的方法把数值传递一口气做完了,当然不可能有时间去刷新画面。
要想 ...

多谢大神指点!
作者: guoxiaomi    时间: 2019-4-28 13:24
本帖最后由 guoxiaomi 于 2019-4-28 13:33 编辑

你在事件脚本里直接设置@wait_count就会触发等待

xp的逻辑是,此场景update方法里有interpreter在执行update时,设置了interpreter的@wait_count属性不为0,就跳出interpreter的update继续执行场景update的其他部分。

所以等待需要2个条件:
1. 此场景中有interpreter实例在更新
2. interpreter实例的@wait_count属性不为0

所以你发现问题的关键了吗?你设置的其实是Game_Battler的属性@wait_count

看一下我签名里的“战斗调用公共事件”吧
作者: taeckle    时间: 2019-4-28 14:03
guoxiaomi 发表于 2019-4-28 13:24
你在事件脚本里直接设置@wait_count就会触发等待

xp的逻辑是,此场景update方法里有interpreter在执行upda ...

谢谢大神指点,那咱要怎么在事件脚本里直接设置@wait_count啊,可以给咱举个例子吗,比如我想等待5秒,,
还有我刚才在你的帖子“战斗调用公共事件”里搜了一下关键字“@wait_count”。怎么好像没有啊。。

作者: taeckle    时间: 2019-4-30 07:25
在诸位大神的帮助下咱的问题已解决啦,下面来总结一下解决这个问题的具体思路:

目标:设置当被打时且自身血量小于等于50%自身血量最大值的时候触发2连反击,每次连击固定伤害500,两次连击时间间隔为1秒

方法:
步骤① 在Scene_battle 下的   def update_phase4_step4 写这段代码:
if target.hp <= target.maxhp/2
$game_system.battle_interpreter.setup($data_common_events[100].list, 0)
end
步骤② 直接在第100号公共事件里写两次伤害500,在两次伤害之间加入等待20帧(20帧为1秒)即可


PS:目前咱也就会借助公共事件来实现这一目标,若有大神能不用公共事件只用脚本实现就再好不过啦!






欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1