设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2518|回复: 15
打印 上一主题 下一主题

[已经解决] 设置释放连击技能时连击的时间间隔@wait_count = XX命令为啥...

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
跳转到指定楼层
1
发表于 2019-4-28 11:30:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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)???

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

2
发表于 2019-4-28 11:56:09 | 只看该作者
因为你不懂脚本的并行处理
你用顺序执行的方法把数值传递一口气做完了,当然不可能有时间去刷新画面。
要想分开显示就要用状态机的方法修改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改成你用的值

点评

两者的战斗系统差别都很大啊,完全不是一套东西。  发表于 2019-4-28 12:54
那大神你平时用VA是怎么写连击时间间隔的啊,可以在下面举一个你常用的例子吗?我自己可以试着把 VA转成XP的。。。  发表于 2019-4-28 12:15
差不多了。我平时用VA,XP里叫的是@parameters,总之是那个意思。  发表于 2019-4-28 12:08
大神你说的$game_troop的interpreter和params[0]是下面这个吗? def command_106 # 设置等待计数 @wait_count = @parameters[0] * 2 # 继续 return true end  发表于 2019-4-28 12:05

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
taeckle + 1 我很赞同

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
3
 楼主| 发表于 2019-4-28 11:58:13 | 只看该作者
KB.Driver 发表于 2019-4-28 11:56
因为你不懂脚本的并行处理
你用顺序执行的方法把数值传递一口气做完了,当然不可能有时间去刷新画面。
要想 ...

多谢大神指点!
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

4
发表于 2019-4-28 13:24:31 | 只看该作者
本帖最后由 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

看一下我签名里的“战斗调用公共事件”吧

评分

参与人数 2星屑 +100 +2 收起 理由
RyanBern + 100 + 1 认可答案
taeckle + 1

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
5
 楼主| 发表于 2019-4-28 14:03:58 | 只看该作者
guoxiaomi 发表于 2019-4-28 13:24
你在事件脚本里直接设置@wait_count就会触发等待

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

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

点评

最后还是用战斗调用公共事件弄好的。。。  发表于 2019-4-28 19:39
弄好了,多谢大家的建议!  发表于 2019-4-28 16:28
我看了你的代码,4楼里已经说明原因了,你需要指定interpreter实例的@wait_conut属性  发表于 2019-4-28 15:20
我现在是在scipt脚本里写战斗脚本的,不是大地图上的事件脚本啊,大神你看我1楼的代码,就是那个 @wait_counts=100死活不触发。。  发表于 2019-4-28 14:37
这个帖子是试图在默认战斗中插入公共事件,这样就可以在事件脚本里写@wait_count了  发表于 2019-4-28 14:29
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
6
 楼主| 发表于 2019-4-30 07:25:56 | 只看该作者
在诸位大神的帮助下咱的问题已解决啦,下面来总结一下解决这个问题的具体思路:

目标:设置当被打时且自身血量小于等于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:目前咱也就会借助公共事件来实现这一目标,若有大神能不用公共事件只用脚本实现就再好不过啦!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 08:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表