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

Project1

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

[已经解决] 窗口问题如何修改

[复制链接]

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
跳转到指定楼层
1
发表于 2010-11-12 23:34:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 zxc3824 于 2010-11-12 23:43 编辑

前面我已经发过类似的文章,缘由在下面的文章中
http://rpg.blue/thread-160570-1-1.html



我修改了如下的脚本:
#==============================================================================
# ■ Window_Command
#------------------------------------------------------------------------------
#  一般的命令选择行窗口。
#==============================================================================

class Window_Command < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     width    : 窗口的宽
  #     commands : 命令字符串序列
  #--------------------------------------------------------------------------
  def initialize(width, commands)
    # 由命令的个数计算出窗口的高
    super(0, 0, width, commands.size * 32 + 32)
    @item_max = 6
    @commands = 6
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  # ● 描绘项目
  #     index : 项目编号
  #     color : 文字色
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
  #--------------------------------------------------------------------------
  # ● 项目无效化
  #     index : 项目编号
  #--------------------------------------------------------------------------
  def disable_item(index)
    draw_item(index, disabled_color)
  end
end

结果却


点评

啊……用代码重新发一遍脚本吧,看着好麻烦……  发表于 2010-11-12 23:35

Lv1.梦旅人

梦石
0
星屑
247
在线时间
195 小时
注册时间
2008-4-13
帖子
330

开拓者

2
发表于 2010-11-13 16:19:25 | 只看该作者
本帖最后由 狸猫阿白 于 2010-11-13 17:29 编辑

@commands 是记录命令窗口各选项名称的变量,并不是让它 = 6 就有6个选项了的。
可以F11打开脚本编辑器,全局搜索“Window_Command.new”,看看程序是如何调用“Window_Command”的。
比如在游戏中按ESC调出菜单,运行的是Scene_Menu,它是这样调用 Window_Command 的:
看 Scene_Menu 的第26行“@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])”。(前面的20~25行分别定义了S1~S6的内容)
然后看Window_Command 的 def initialize(width, commands),说明要调用Window_Command 需要2个参数,上面的注释写了:“ #     width    : 窗口的宽;  #     commands : 命令字符串序列”。这两个参数决定所调用 Window_Command 窗口的宽度和选项数量及内容。
对应一下,160就是宽度,而[s1, s2, s3, s4, s5, s6]就是命令字符串序列,这个数组里面有6个字符串,因此有6个选项。
Window_Command 的第17行“@commands = commands”,就是让变量@commands 的值等于[s1, s2, s3, s4, s5, s6]

而你的脚本把它改成 “@commands = 6”,则@commands 记录的就不是字符串而是常数,第40行self.contents.draw_text(rect, @commands[index])的蓝色部分自然出错。

========================补充=======================
在脚本编辑器里全局搜索“Window_Command.new”,发现有3处地方调用了这一窗口,直接修改 Window_Command的话,会导致其它调用 Window_Command 的地方也变成一行6列,因此要在 Window_Command 的  部分进行条件分歧:
  1.    if $scene.is_a?(Scene_Menu)
  2.       # 一行有6列
  3.       super(0, 0, width, 64)
  4.       @item_max = commands.size
  5.       @column_max = 6
  6.       @commands = commands
  7.       self.contents = Bitmap.new(width - 32, 32)
  8.     else
  9.       # 执行原脚本
  10.       super(0, 0, width, commands.size * 32 + 32)
  11.       @item_max = commands.size
  12.       @commands = commands
  13.       self.contents = Bitmap.new(width - 32, @item_max * 32)
  14.     end
复制代码

点评

复制到哪去?  发表于 2010-11-14 13:10

评分

参与人数 1星屑 +290 收起 理由
fux2 + 290 认可+脸熟(Lv2,%33)

查看全部评分

——我听说和尚庙里很多同志啊,不知道是真是假。——我们不称同志的,那是你们俗家的说法,我们都叫某某师兄的。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
3
 楼主| 发表于 2010-11-14 13:16:30 | 只看该作者
回复 狸猫阿白 的帖子

复制上去说有语法错误哦

点评

替换 Window_Command 原脚本的第15~18行。当然,在 Window_Command 的 def draw_item(index, color) 部分也要进行相应的条件分歧,这个你试一下自己解决吧。  发表于 2010-11-14 13:25
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
4
 楼主| 发表于 2010-11-14 14:13:01 | 只看该作者
回复 狸猫阿白 的帖子

复制上去他说

点评

应该是哪里少了个end,自己检查一下吧。  发表于 2010-11-14 17:55
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
5
 楼主| 发表于 2010-11-15 17:14:37 | 只看该作者
回复 狸猫阿白 的帖子

晕死,command 里面的都加过end了,还是这样
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
247
在线时间
195 小时
注册时间
2008-4-13
帖子
330

开拓者

6
发表于 2010-11-15 18:41:36 | 只看该作者
回复 zxc3824 的帖子

Window_Command 原脚本:
  1.   def initialize(width, commands)
  2.     # 由命令的个数计算出窗口的高
  3.     super(0, 0, width, commands.size * 32 + 32)
  4.     @item_max = commands.size
  5.     @commands = commands
  6.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  7.     refresh
  8.     self.index = 0
  9.   end
复制代码
修改为:
  1.   def initialize(width, commands)
  2.     # 由命令的个数计算出窗口的高
  3.     # 如果运行 Scene_Menu
  4.     if $scene.is_a?(Scene_Menu)
  5.       super(0, 0, width, 64)
  6.       @item_max = commands.size
  7.       @column_max = 6
  8.       @commands = commands
  9.       self.contents = Bitmap.new(width - 32, 32)
  10.     else
  11.       super(0, 0, width, commands.size * 32 + 32)
  12.       @item_max = commands.size
  13.       @commands = commands
  14.       self.contents = Bitmap.new(width - 32, @item_max * 32)
  15.     end
  16.     refresh
  17.     self.index = 0
  18.   end
复制代码
Window_Command 原脚本:
  1. def draw_item(index, color)
  2.     self.contents.font.color = color
  3.     rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
  4.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  5.     self.contents.draw_text(rect, @commands[index])
  6.   end
复制代码
修改为:
  1.   def draw_item(index, color)
  2.     self.contents.font.color = color
  3.     if $scene.is_a?(Scene_Menu)
  4.       rect = Rect.new(4 + 109 * index, 0, self.contents.width - 8, 32)
  5.     else
  6.       rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
  7.     end
  8.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  9.     self.contents.draw_text(rect, @commands[index])
  10.   end
复制代码
——我听说和尚庙里很多同志啊,不知道是真是假。——我们不称同志的,那是你们俗家的说法,我们都叫某某师兄的。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
558
在线时间
256 小时
注册时间
2010-8-25
帖子
371
7
 楼主| 发表于 2010-11-16 17:04:21 | 只看该作者
回复 狸猫阿白 的帖子

认可你了

点评

呵呵,调窗口位置、调选项位置什么的是RM脚本入门的第一步,多研究研究吧,这个坎一过有不少方面都可以触类旁通。  发表于 2010-11-16 18:26
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 14:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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