miantouchi 发表于 2020-8-2 20:16 一次性@wait_count赋值 @wait_count = @wait_count.nil? ? 0 : @wait_count |
miantouchi 发表于 2020-8-2 13:34 第二个问题也一样嘛, 把按键判断换成等待处理就是了, 等待时间就在 start_phase2 设置就好了 至于事件, 因为战斗开始可以调用事件,而且会等到事件运行结束才开始战斗, 这个特性不就正好和你要的效果一样咯, 所以,直接回合0调用公共事件去显示个窗口就好了 栗子 ![]() 要自动消失就把按键处理换成等待XX, 搞定 ![]() |
本帖最后由 miantouchi 于 2020-8-2 13:36 编辑 灯笼菜刀王 发表于 2020-8-1 22:19 第一个问题解决了 def update_phase2方法里面加上按键判断就好了。 第二个问题,经过你的提示 def phase3_setup_command_window # 同伴指令窗口无效化 @party_command_window.active = false @party_command_window.visible = false # 角色指令窗口无效化 @actor_command_window.active = true @actor_command_window.visible = true #隐藏消息窗口 @inf_window.visible = false #2020.8.1窗口指令出现时,隐藏消息内容 # 设置角色指令窗口的位置 @actor_command_window.x = 0 #@actor_index * 160 人物指令光标位置 # 设置索引为 0 @actor_command_window.index = 0 end 我的原代码就是到这个步骤的时候,隐藏消息窗口,显示指令窗口,如果再往后移不知道会咋样,如果后移的太严重了,指令窗口害怕显示的就不是时间了。 也就是我的消息窗口显示的时候、指令窗口是隐藏的, 当指令窗口出来的时候,消息窗口是隐藏的。 因为游戏界面就那么大。 最后看到你说用战斗事件处理,绿色,如果是这样那最好啊,这个是怎么实现的? |
def update if 信息显示中 if Input.press?(Input::C) 结束信息显示 end return end 刷新其他的 end |
参与人数 1 | 赞 +1 | 收起 理由 |
---|---|---|
![]() | + 1 | 塞糖 |
本帖最后由 灯笼菜刀王 于 2020-8-1 22:34 编辑 ![]() 事件是有index逐条运行的, 而脚本是一瞬间执行全部可执行的内容的。 而各种即时判定,主动等待等,都是通过循环执行某段脚本(通常就是update的方法)来达到的 所以你的写法有根本上的逻辑错误 scene battle的脚本运行原理你应该知道吧, 它是通过 @phase 来分歧各个阶段的循环, 我把这种通过某个变量控制每个阶段进行不同的循环过程叫做"流程" 而 phase4 还有自己的小流程, 是通过 @phase4_step 来分歧的 update具体是怎么工作的呢? 战斗开始的时候, 在main的主循环loop do之前,调用了start_phase1, 这个方法把 @phase = 1 , 看scene battle1 的updete, 可以发现通过 @phase的分歧,这个时候是开始循环 update_phase1 的内容, update_phase1 很简单, 就是判断是否达成胜负条件, 达成后中断处理,进入胜负处理环节, 没达成的话, 就调用 start_phase2 然后start_phase2这个方法, 把@phase = 2, 这样就开始循环 update_phase2 的方法, 同时 start_phase2 还打开了战斗/逃跑窗口, 而 update_phase2 里,把跳到别的阶段的方法放在按键分歧里, 这个时候,因为@phase == 2, 所以它是一直被循环执行的, 但是没有按键的话,就会一直不满足跳出条件,从而在这个阶段持续循环 当玩家按下C键,满足了条件,根据@party_command_window的index分支,调用start_phase3或者update_phase2_escape, 这个时候就进入了新的循环("流程前进") 好了,原理说完, 如果能理解的话, 可以在scene battle里搜索 @help_window.set_text 这句, 这句是显示HELP窗口,并刷新设置的文字, 然后搜索 @help_window.visible = false 这句是隐藏HELP窗口, 思考下,HELP窗口是怎么做到"自动出现,自动消失, 而且不会一闪而过让人家看不清楚" 最后,回到主题, 你想要的效果, 1就是"战斗/逃跑"的方法, 2就是HELP窗口的方法, 试试吧 -------- PS: 其实用战斗事件也可以做到你要的效果,而且不用改动默认流程, 更绿色的哦, 笑 |
参与人数 2 | 星屑 +100 | 赞 +2 | 收起 理由 |
---|---|---|---|
![]() | + 100 | + 1 | 认可答案 |
![]() | + 1 | 认可答案 |
本帖最后由 灯笼菜刀王 于 2020-8-1 20:38 编辑 答案很简单, 你把第二部分放到if end 里就好了 栗子 def 第二部分 该干嘛干嘛 end def update if Input.press?(Input::C) 第二部分 end @wait_count -= 1 if @wait_count > 0 if @wait_count == 1 第二部分 @wait_count -= 1 end end |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-2-18 09:53
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.