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

Project1

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

[已经解决] 请问如何能在对话中通过按键执行公共事件(已解决)

[复制链接]

Lv4.逐梦者

梦石
1
星屑
14790
在线时间
2106 小时
注册时间
2017-9-28
帖子
662
跳转到指定楼层
1
发表于 2019-6-27 13:56:35 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Nil2018 于 2019-6-29 23:39 编辑

demo:

里面使用到脚本: YEA - 按键触发公共事件  按下A键可以执行一个公共事件,效果是画面闪烁+色调切换,可是对话中无法执行。
有什么办法能解决这个问题吗?

VA外站脚本汉化群:226308173   |    部分远古文件备份:https://wwzv.lanzoue.com/b02rac5pc  密码:acgm

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

2
发表于 2019-6-27 15:00:12 | 只看该作者
根据RM的设计,对话窗口运行时会中止事件解释器(Game_Interpreter)
所以,默认情况下,是没有办法一边对话一边进行公共事件的。

当然,你这个公共事件的内容比较简单,不涉及并行操作,因此可以手动实现。
你可以插入下面这段脚本。

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Message
  4. #------------------------------------------------------------------------------
  5. #  显示文字信息的窗口。
  6. #==============================================================================
  7.  
  8. class Window_Message < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● [覆盖]处理输入等待
  11.   #--------------------------------------------------------------------------
  12.   def input_pause
  13.     self.pause = true
  14.     wait(10)
  15.     #==================================================================
  16.     while !(Input.trigger?(:B) || Input.trigger?(:C))
  17.       if Scene_Map === (s = SceneManager.scene)
  18.         CLD99::COMMON_EVENT[15] if Input.trigger?(:X)
  19.       end
  20.       Fiber.yield
  21.     end   
  22.     #==================================================================
  23.     Input.update
  24.     self.pause = false
  25.   end
  26. end
  27.  
  28. module CLD99
  29.   module COMMON_EVENT
  30.     class << self
  31.       def [](n)
  32.         send(sprintf("event_%03d", n))
  33.       end
  34.  
  35.       def event_015
  36.         RPG::SE.new("Battle1", 90, 110).play
  37.         $game_map.screen.start_flash(Color.new(255,255,255), 10)
  38.         10.times { Graphics.update }
  39.         if $game_switches[180]
  40.           $game_map.screen.start_tone_change(Tone.new(0,0,17,34), 1)
  41.         else        
  42.           $game_map.screen.start_tone_change(Tone.new(0,0,17,187), 1)
  43.         end
  44.         $game_switches[180] = !$game_switches[180]
  45.       end
  46.     end
  47.   end
  48. end


这段脚本的原理也很简单,就是把你的公共事件"翻译”成脚本直接运行。
当然,如果有更多这样的需求,就需要找人帮你了。

点评

呜呜呜,好不容易找到这里,发现版本不对......如果大佬还能看到的话,能给一个MV版本的脚本吗  发表于 2023-8-15 23:15
阿我知道了...谢谢日历大佬!  发表于 2019-6-27 15:28
用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
14790
在线时间
2106 小时
注册时间
2017-9-28
帖子
662
3
 楼主| 发表于 2019-6-27 16:01:07 | 只看该作者
本帖最后由 Nil2018 于 2019-6-29 23:39 编辑
KB.Driver 发表于 2019-6-27 15:00
根据RM的设计,对话窗口运行时会中止事件解释器(Game_Interpreter)
所以,默认情况下,是没有办法一边对 ...


..又要麻烦大佬一下,
游戏里有个公共事件需要显示图片,事件指令:


我修改以后..发现图片的显示有问题...日历大佬可以帮修正一下吗 ..
VA外站脚本汉化群:226308173   |    部分远古文件备份:https://wwzv.lanzoue.com/b02rac5pc  密码:acgm
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39587
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

4
发表于 2019-6-27 17:46:46 | 只看该作者
Nil2018 发表于 2019-6-27 16:01
..又要麻烦大佬一下,
游戏里有个公共事件需要显示图片,事件指令:

RUBY 代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_Message
  4. #------------------------------------------------------------------------------
  5. #  显示文字信息的窗口。
  6. #==============================================================================
  7.  
  8. class Window_Message < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● [覆盖]处理输入等待
  11.   #--------------------------------------------------------------------------
  12.   def input_pause
  13.     self.pause = true
  14.     wait(10)
  15.     #==================================================================
  16.     while !(Input.trigger?(:B) || Input.trigger?(:C))
  17.       if Scene_Map === (s = SceneManager.scene)
  18.         CLD99::COMMON_EVENT[15] if Input.trigger?(:X)
  19.       end
  20.       Fiber.yield
  21.     end   
  22.     #==================================================================
  23.     Input.update
  24.     self.pause = false
  25.   end
  26. end
  27.  
  28. class Scene_Map
  29.   def update_spriteset(duration)
  30.     duration.times do
  31.       Graphics.update
  32.       @spriteset.update  
  33.     end
  34.   end
  35. end
  36.  
  37. module CLD99
  38.   module COMMON_EVENT
  39.     class << self
  40.       def [](n)
  41.         send(sprintf("event_%03d", n))
  42.       end
  43.  
  44.       def event_015
  45.         RPG::SE.new("Absorb1", 90, 100).play
  46.  
  47.  
  48.         $game_map.screen.pictures[2].show("sight2", 0, 0, 0, 100, 100, 255, 0)
  49.         SceneManager.scene.update_spriteset(2)           
  50.         $game_map.screen.pictures[3].show("sight3", 0, 0, 0, 100, 100, 255, 0)
  51.         SceneManager.scene.update_spriteset(2)
  52.         $game_map.screen.pictures[4].show("sight4", 0, 0, 0, 100, 100, 255, 0)
  53.         SceneManager.scene.update_spriteset(2)
  54.         $game_map.screen.pictures[5].show("sight5", 0, 0, 0, 100, 100, 255, 0)
  55.         SceneManager.scene.update_spriteset(2)
  56.         $game_map.screen.pictures[6].show("dark", 0, 0, 0, 100, 100, 255, 0)
  57.         SceneManager.scene.update_spriteset(2)
  58.  
  59.         if $game_switches[180]
  60.           $game_map.screen.start_tone_change(Tone.new(0,0,17,34), 1)
  61.         else        
  62.           $game_map.screen.start_tone_change(Tone.new(0,0,17,187), 1)
  63.         end
  64.         $game_switches[180] = !$game_switches[180]
  65.  
  66.         $game_map.screen.pictures[6].erase
  67.         SceneManager.scene.update_spriteset(2)
  68.         $game_map.screen.pictures[5].erase
  69.         SceneManager.scene.update_spriteset(2)
  70.         $game_map.screen.pictures[4].erase
  71.         SceneManager.scene.update_spriteset(2)
  72.         $game_map.screen.pictures[3].erase
  73.         SceneManager.scene.update_spriteset(2)
  74.         $game_map.screen.pictures[2].erase
  75.  
  76.       end
  77.     end
  78.   end
  79. end


所以情况复杂了以后就没那么简单了。
因为一次执行中涉及到图像的动态变化(需要不断更新才能显示出变化),必须手动在流程中加入update

为了防止代码太长,我把update做成了Scene_Map里的方法
如果不好理解的话,只要把SceneManager.scene.update_spriteset(n)当做刷新图片显示 并等待n帧 就好

另外,由于Game_Picture规定的图片z值最大不能超过100,而对话框的z值是200
所以你的“眨眼”图片会被对话框盖住。
这是RM机制的问题,如果不想这样的话就只能自己弄精灵自己设定更大的Z值。

点评

醋虾,感谢日历大佬!  发表于 2019-6-27 18:31
如果想了解更多关于精灵刷新的知识,可以看看这篇教程 https://rpg.blue/thread-477333-1-1.html  发表于 2019-6-27 17:48

评分

参与人数 1星屑 +50 收起 理由
VIPArcher + 50 认可答案

查看全部评分

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 18:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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