查看: 3759|回复: 0

[RMVA发布] 菜单读档 存档 居中选项 删除整队 等 整合 教程

[复制链接]
梦石
0
星屑
1297
在线时间
995 小时
注册时间
2014-12-14
回帖
2939

开拓者

发表于 2016-5-1 17:54:54 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Vortur 于 2016-11-30 20:59 编辑

RMVA有支援 第一集 菜单的修改



[fold=前言]致谢:
感谢6R所有人。此系列得益于大家的无私分享
另外留点初恋情节给最开始的教程@darkharvest   【直播?】短篇游戏制作过程  ←直接于此页开始即可


-设计思路:
  本教程不以“循序渐进”为主旨。仅对每集中,【功能】所涉的知识进行【简陋地】讲解,以求速成。教程中可能出现的谬误,请保持必要警惕。
  

-请阅读范例脚本
  几乎所有在下修改的地方都写明了【注释】,用以解释脚本功能。
  

-选修文章:
【RGSS 符号对照表】
【各种变量的比较,常量的比较】
【RMVA工具 快键】
  
-附:
【全部教程目录】




[/fold][fold=脚本在此] 【RMVA 有支援】第一集.菜单的修改.zip .zip (146.23 KB, 下载次数: 67)
备用:
【RMVA 有支援】第一集.菜单的修改 ←这里免费!



[/fold][fold=效果图]1.
1.png
2.
2.png
3.
3.png



[/fold]


一、基本
[fold=方法]def 就是方法。以def起头,以end结尾
如[pre lang="ruby"]
  def make_command_list
    add_command(Vocab::to_title, :to_title)
    add_command(Vocab::shutdown, :shutdown)
    add_command(Vocab::cancel,   :cancel)
  end[/pre]
其中:
  “make_command_list 方法”以“ def make_command_list”开头,以最近的一个“end”结尾。这之间的部分就是"make_command_list"里执行的内容。
  "make_command_list"是方法名。
  在某个类中,同名的方法,就是同一个方法。不同类中的同名方法,是不同的方法。

详情请参《RGSS2教程-第二版》P13;原作者加密了文件,这里就不复制内容了




[/fold][fold=类]class 就是类。以class起头,以end结尾
1.  子类,父类
  【Window_GameEnd 】中:
[pre lang="ruby"]
class Window_GameEnd < Window_Command  # ←表示“Window_GameEnd”【继承于】“Window_Command”。
[/pre]“Window_Command”是“Window_GameEnd”的 父类,“Window_GameEnd”是“Window_Command”的 子类。


2.1  子类的继承
在某个类中,同名的方法,是同一个方法;在脚本编辑器中,同名的类就是同一个类。
要修改某类的内容,【通常】可以"在main前插入同名的类"的方式实现。
子类可继承父类预置的内容,或补充、或重定义父类预置的信息。
这3条是在main前插入脚本以修改默认设置的原理。
  1)  某方法a,见于父类,不见于子类,在子类中,以父类里书写的方式运行。
  2)  某方法a,不在父类,却见于子类,在子类中,以子类里书写的方式运行。
  3)  某方法a,见于父类,也见于子类,在两类中有所不同,在子类中:
       按照子类中的运行
  4)  某方法a,见于父类,也见于子类,在两类中完全相同,无需赘言


2.2  【例举】



[/fold]
二、步骤概要
[fold=1.【窗口文字居中】]
a.png b.png c.png
  1)窗口中,【文字的居中】,(【选项】中的文字 无法在此被定义为居中)
【Window_Command】类的【 alignment】方法中
[pre lang="ruby"]
return 0
#改为
return 1[/pre]0=左对齐
1=居中
2=右对齐
此姿势来自【F1过度汉化版】




   [/fold][fold=2. 【选项窗口居中】] cccc.png
  2)  【选项窗口居中】
【Window_ChoiceList】类的【update_placement】方法中
[pre lang="ruby"]
self.x = Graphics.width - width
#改为
self.x = (Graphics.width - width) / 2[/pre]“self.x = Graphics.width - width”猜测其含义可能是:
【Window_ChoiceList的x坐标】=【整个游戏画面的宽度】-【Window_ChoiceList的宽度】
【Window_ChoiceList的x坐标】可能指选项窗口的【中轴线】的坐标




  [/fold][fold=3. 【选项窗口控制符修正】]
用了就这样:

5.png

不用就这样:

4.png
  3)  【选项窗口控制符修正】
【Window_ChoiceList】类中,【update_placement】方法之下
[pre lang="ruby"]  def max_choice_width
    $game_message.choices.collect {|s| pro_ex(s) }.max
  end
  def pro_ex(str)
    s = convert_escape_characters(str)
    pos = {:x => 0, :y => -Graphics.height, :new_x => 0, :height => calc_line_height(s)}
    process_character(s.slice!(0, 1), s, pos) until s.empty?
    pos[:x]
  end[/pre] 【代码读取顺序】:方法的调用要先于方法的定义。
“update_placement”中调用“max_choice_width”方法,
故“max_choice_width”要在“update_placement”的下面写




  [/fold][fold=4. 【增减命令】]
  4)  【增减命令】
一个命令要分为两个部分:
“【“Window”字样的since】中的【make_command_list 方法】”——如【Window_GameEnd】
与
“【非“window”字样的since】中的【create_command_window 方法】”——如【Scene_End】

  注释掉前者中的命令,则命令不显示;注释掉后者中的命令,则命令会失效。
  另外,“判定命令的有效”通常写在前者中。(如【save】是否以灰色显示)
  此处,要修改“结束游戏”菜单中的项目,主要修改【Window_GameEnd】与【Scene_End】两个类。




   
[/fold][fold=5. 【返回游戏】]  5)  【返回游戏】
【Scene_End】类中,增加:
[pre lang="ruby"]  def return_scene
    close_command_window
    SceneManager.return
    SceneManager.return
  end[/pre]
以防每次在【save】画面或【继续游戏】画面中,要返回【游戏画面】时,必须按下2次【取消键】



  [/fold][fold=6. 【显示文字居中】]
  6)  【显示文字居中】(对话、提示文字居中)
【转载】脚本插件:文章居中



  [/fold]
[fold=下期预告:]
shalmy.gif



[/fold]



16.12.1  增设参考资料,怀疑"子类方法a 补充了父类中没有的内容,则两者的内容都运行"记录有误。准备修改大纲,优化内容归类:游戏菜单增减命令,开始菜单选项窗口位置,窗口文字居中,选项窗口居中,选项文字居中(无法达成),显示文字居中
16.8.24  改吐了...
16.8.23  使文章更短
RMVA有支援第一集的编辑工作,到此为止了(16.8.1也就是今天)。如无意外,此楼应该短期内不再进行再编辑。





评分

参与人数 1星屑 +66 收起 理由
MeowSnow + 66 哦膜嘻啰噫

查看全部评分

【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部