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

Project1

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

[已经解决] 请教显示文章过程中呼出菜单后窗口定位的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
跳转到指定楼层
1
发表于 2014-8-26 21:58:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Thylakoid 于 2014-9-17 16:20 编辑

       标题字数有限,可能描述得不太清楚,正文详述一下。

       此系统在显示文章过程中可以按B键呼出菜单,也解决了呼出菜单后对话向后跳的问题。但是当显示文章与显示选择项的窗口合并成一个时,


       呼出菜单后


       再返回对话中或者存档就只能显示选择项的窗口了。


       因此请教如何解决这个问题。也就是当文章和选择项窗口合并时,执行呼出菜单指令,然后存档或者返回对话,让其依旧显示文章和选择项合并的窗口。即既能看到问题又能看到选项。
       以下这段代码实现B键呼出菜单功能,处于两个脚本中:Window_Message 262至277行,★Window_Message826至841行。修改时需要将两处一起改。(2号开关为回忆系统的启动器,楼主个人认为其与本楼问题关系不大)
  1. if Input.trigger?(Input::B)
  2. unless $game_system.menu_disabled
  3. $game_switches[2] = true
  4. Screen::shot
  5. $game_system.map_interpreter.index -= 1 unless $game_system.map_interpreter.index <= 0 #BB:事件解释器index往前跳
  6. while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
  7. $game_system.map_interpreter.index -= 1
  8. end
  9. while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 402)
  10. $game_system.map_interpreter.index -= 1
  11. end
  12. $game_system.se_play($data_system.decision_se)
  13. $scene = Scene_Menu.new
  14. return
  15. end
  16. end
复制代码
最后说一下我个人在研究此问题时遇到的情况。(以下理解未必正确,仅供参考)
       我并不清楚注释为“事件解释器”的$game_system.map_interpreter.index 这段代码的具体作用。个人只是把它理解成事件指针一类的东西。-=1的作用按我理解就是让事件的指针向前移动一个位置,使系统去解析前一个事件。之所以要前移是因为当前的显示文章或显示选择项的命令已经完成,呼出菜单后存档或者再返回就会直接完成下一个事件指令。所以,令其前移,就可以解决对话向后跳的问题。不过,当显示文章和显示选择项合并窗口时,虽然屏幕上只呈现出一个窗口,但实际上先后执行了“显示文章”和“显示选择项”两个事件指令。而指针只前移一个,那么返回后自然只会从显示选择项的指令开始解析事件,显示文章的部分就没有了。于是我将第二个while循环改成了$game_system.map_interpreter.index -= 2,尝试让其向前跳两次,回到显示文章的命令上。但试验失败了,呼出菜单后返回,仍然只显示选择项;呼出菜单后存档(工程中第二个存档),也只能存下选择项的窗口。
       在此诚心希望得到指点。如果可以的话,更希望为此问题施与帮助的朋友在提出脚本的修改方法时,能够给出一些脚本语句的注释。先谢过。

点评

这个是什么~?  发表于 2014-8-26 22:32

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
2
 楼主| 发表于 2014-9-2 22:04:58 | 只看该作者
一星期无进展,果然整合脚本这类问题没多少人愿意慷慨费神。的确,这类问题比基础问题显得更麻烦。我也一直在研究,有少许收获,虽然未解决,但现在可以把这个问题简化。就是,下面这行脚本究竟起什么作用,效果是什么?
  1. $game_system.map_interpreter.index -= 1
复制代码
当然和一楼一样,我自己也做过试验。具体做法:先显示一段文章,然后用事件脚本执行上面这段命令。结果:只剩显示文章的窗口(字不见了),而且接下来卡住不动,不能继续执行后面的事件。语句表面上是解释器向前跳一下,但到底跳到了什么位置上,跳完了为什么不能继续执行事件,我都不懂。所以,我真的不明白它的准确含义。如果能明白的话,这篇帖子的问题我自己应该有办法解决。因此真的希望大家能帮帮忙。一楼发的工程里面那一堆脚本都可以不用看,就看上面这一句命令,到底起什么作用?如何起作用?弄清楚这个,这帖子的问题就可以结束了。问题再放几天,如果还是没有起效的援助且我自己也没研究清楚的话,我就只好@整合过这套系统的前辈了。当然了,希望渺茫,毕竟那几位很久没上过论坛。

PS:一楼试验失败的原因,同时也是为什么文章窗口和选择项窗口合并后,呼出菜单再返回或存档只能显示选择项窗口的原因。如下:第二个while循环的条件是“正要执行选择项处理”,当这个命令$game_system.map_interpreter.index -= 1循环着执行到不符合条件时,循环就停止了。而当文章窗口和选择项窗口合并再显示出来时,事件位置实际上停留在“正要执行选择项处理”这里。所以程序在这时执行的是一楼脚本中的第二个while循环,第一个while循环并不执行。这样就只留下了选择项的窗口,而没有文章的。只要把循环改一改,问题就能解决。因此目前的困难就是这句话了$game_system.map_interpreter.index -= 1。究竟是什么意思?起作用的原理?以及怎么使用它才对?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
65 小时
注册时间
2013-4-18
帖子
81
3
 楼主| 发表于 2014-9-17 16:18:12 | 只看该作者
只晚来了几小时,问题被归类过期了。那个,我联系上原作者了,问题刚解决不久,马上来论坛结贴。所以还希望管理员@RyanBern  能把问题分类改成“已经解决”而且是楼主自行结贴吧。
接下来是解决方法:$game_system.map_interpreter.index -= 1和我所理解的是一个意思。-1是事件解释器前跳一次,-2是前跳两次,以此类推。将一楼脚本中第二个while循环的条件单独拿出来作为最外层的条件分歧判断,是的话$game_system.map_interpreter.index -= 2,然后继续执行第一个while循环;不是的话$game_system.map_interpreter.index -= 1,然后继续执行第一个while循环。
修改后如下:
  1. if Input.trigger?(Input::B)
  2.         unless  $game_system.menu_disabled
  3.           $game_switches[2] = true
  4.           Screen::shot
  5.           if $game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 402
  6.             $game_system.map_interpreter.index -= 2
  7.             while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
  8.               $game_system.map_interpreter.index -= 1
  9.             end
  10.           else
  11.             $game_system.map_interpreter.index -= 1
  12.             while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
  13.               $game_system.map_interpreter.index -= 1
  14.             end
  15.           end

  16.             $game_system.se_play($data_system.decision_se)
  17.             $scene = Scene_Menu.new
  18.             return
  19.           end
  20.         end
复制代码
另外要说的是虽然本问题涉及的工程模板是在论坛的历史博物馆中找到的,但经过交流,原作者确认论坛的转载未经授权。因此楼主决定删掉一楼放出的工程模板,请各位理解。最后感谢前辈天圣的马甲对楼主做出的悉心指点。以上。

点评

不好意思啦,因为问题拖得太久了,而且当时已被关闭,所以结贴有点急,一个不小心连了一层。  发表于 2014-9-17 22:39

评分

参与人数 1星屑 -1 收起 理由
︶ㄣ牛排ぶ -1 连帖……

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-25 03:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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