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

Project1

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

[已经解决] 召唤星辰和各种大大!脚本不明,望赐教!!!

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
43 小时
注册时间
2013-4-28
帖子
32
跳转到指定楼层
1
发表于 2013-5-13 18:42:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 woshizeshi 于 2013-5-16 21:17 编辑

最近看脚本有点不太明白的地方,又不愿意稀里糊涂的就用了,总想琢磨个明白~
如下脚本 列数是在哪里获得的,初始不是nil么,哪步给column赋值的?看了半天没看出来……

Lv1.梦旅人

梦石
0
星屑
50
在线时间
43 小时
注册时间
2013-4-28
帖子
32
2
 楼主| 发表于 2013-5-13 18:45:56 | 只看该作者
  1. 第二种自定义菜单(显示角色名)

  2. 一:插在Main前的主体脚本,使用方法看说明。
  3. #==============================================================================
  4. # ■ Window_CommandCustom
  5. #
  6. #     与Window_Command功能一致,不同点就是可以自己给定行、列的值,使菜单像轩辕剑
  7. # 系列的排列……
  8. #
  9. # 举例:                            行  列               -命令列表-
  10. #      Window_CommandCustom.new(160, 2, 3, ["攻击","法术","物品","绝技","防御","逃跑"])
  11. #                               ↑
  12. #                            每一格的宽
  13. #==============================================================================

  14. #==============================================================================
  15. # ■ Window_SelectableCustom
  16. #------------------------------------------------------------------------------
  17. #  拥有光标的移动以及滚动功能的窗口类。
  18. #==============================================================================

  19. class Window_SelectableCustom < Window_Base
  20.   #--------------------------------------------------------------------------
  21.   # ● 定义实例变量
  22.   #--------------------------------------------------------------------------
  23.   attr_reader   :index                    # 光标位置
  24.   attr_reader   :help_window              # 帮助窗口
  25.   #--------------------------------------------------------------------------
  26.   # ● 初始画对像
  27.   #     x      : 窗口的 X 坐标
  28.   #     y      : 窗口的 Y 坐标
  29.   #     width  : 窗口的宽
  30.   #     height : 窗口的高
  31.   #--------------------------------------------------------------------------
  32.   def initialize(x, y, width, height)
  33.     super(x, y, width, height)
  34.     @item_max = 1
  35.     @column_max = $column
  36.     @index = -1
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 设置光标的位置
  40.   #     index : 新的光标位置
  41.   #--------------------------------------------------------------------------
  42.   def index=(index)
  43.     @index = index
  44.     # 刷新帮助文本 (update_help 定义了继承目标)
  45.     if self.active and @help_window != nil
  46.       update_help
  47.     end
  48.     # 刷新光标矩形
  49.     update_cursor_rect
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 获取开头行
  53.   #--------------------------------------------------------------------------
  54.   def top_row
  55.     # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
  56.     return self.oy / 32
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 设置开头行
  60.   #     row : 显示开头的行
  61.   #--------------------------------------------------------------------------
  62.   def top_row=(row)
  63.     # row 未满 0 的场合更正为 0
  64.     if row < 0
  65.       row = 0
  66.     end
  67.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  68.     if row > $row - 1
  69.       row = $row - 1
  70.     end
  71.     # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
  72.     self.oy = row * 32
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取 1 页可以显示的行数
  76.   #--------------------------------------------------------------------------
  77.   def page_row_max
  78.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
  79.     return (self.height - 32) / 32
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 获取 1 页可以显示的项目数
  83.   #--------------------------------------------------------------------------
  84.   def page_item_max
  85.     # 将行数 page_row_max 乘上列数 @column_max
  86.     return page_row_max * $column
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 帮助窗口的设置
  90.   #     help_window : 新的帮助窗口
  91.   #--------------------------------------------------------------------------
  92.   def help_window=(help_window)
  93.     @help_window = help_window
  94.     # 刷新帮助文本 (update_help 定义了继承目标)
  95.     if self.active and @help_window != nil
  96.       update_help
  97.     end
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ● 更新光标举行
  101.   #--------------------------------------------------------------------------
  102.   def update_cursor_rect
  103.     # 光标位置不满 0 的情况下
  104.     if @index < 0
  105.       self.cursor_rect.empty
  106.       return
  107.     end
  108.     # 获取当前的行
  109.     row = @index / $column
  110.     # 当前行被显示开头行前面的情况下
  111.     if row < self.top_row
  112.       # 从当前行向开头行滚动
  113.       self.top_row = row
  114.     end
  115.     # 当前行被显示末尾行之后的情况下
  116.     if row > self.top_row + (self.page_row_max - 1)
  117.       # 从当前行向末尾滚动
  118.       self.top_row = row - (self.page_row_max - 1)
  119.     end
  120.     # 计算光标的宽
  121.     cursor_width = $width
  122.     # 计算光标坐标
  123.     x = @index % $column * cursor_width
  124.     y = @index / $column * 32 + 32 - self.oy
  125.     # 更新国标矩形
  126.     self.cursor_rect.set(x, y, cursor_width, 32)
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 刷新画面
  130.   #--------------------------------------------------------------------------
  131.   def update
  132.     super
  133.     # 可以移动光标的情况下
  134.     if self.active and @item_max > 0 and @index >= 0
  135.       # 方向键下被按下的情况下
  136.       if Input.repeat?(Input::DOWN)
  137.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  138.         # 或光标位置在(项目数-列数)之前的情况下
  139.         if ($column == 1 and Input.trigger?(Input::DOWN)) or
  140.            @index < @item_max - $column
  141.           # 光标向下移动
  142.           $game_system.se_play($data_system.cursor_se)
  143.           @index = (@index + $column) % @item_max
  144.         end
  145.       end
  146.       # 方向键上被按下的情况下
  147.       if Input.repeat?(Input::UP)
  148.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  149.         # 或光标位置在列之后的情况下
  150.         if ($column == 1 and Input.trigger?(Input::UP)) or
  151.            @index >= $column
  152.           # 光标向上移动
  153.           $game_system.se_play($data_system.cursor_se)
  154.           @index = (@index - $column + @item_max) % @item_max
  155.         end
  156.       end
  157.       # 方向键右被按下的情况下
  158.       if Input.repeat?(Input::RIGHT)
  159.         # 列数为 2 以上并且、光标位置在(项目数 - 1)之前的情况下
  160.         if $column >= 2 and @index < @item_max - 1
  161.           # 光标向右移动
  162.           $game_system.se_play($data_system.cursor_se)
  163.           @index += 1
  164.         end
  165.       end
  166.       # 方向键左被按下的情况下
  167.       if Input.repeat?(Input::LEFT)
  168.         # 列数为 2 以上并且、光标位置在 0 之后的情况下
  169.         if $column >= 2 and @index > 0
  170.           # 光标向左移动
  171.           $game_system.se_play($data_system.cursor_se)
  172.           @index -= 1
  173.         end
  174.       end
  175.       # R 键被按下的情况下
  176.       if Input.repeat?(Input::R)
  177.         # 显示的最后行在数据中最后行上方的情况下
  178.         if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  179.           # 光标向后移动一页
  180.           $game_system.se_play($data_system.cursor_se)
  181.           @index = [@index + self.page_item_max, @item_max - 1].min
  182.           self.top_row += self.page_row_max
  183.         end
  184.       end
  185.       # L 键被按下的情况下
  186.       if Input.repeat?(Input::L)
  187.         # 显示的开头行在位置 0 之后的情况下
  188.         if self.top_row > 0
  189.           # 光标向前移动一页
  190.           $game_system.se_play($data_system.cursor_se)
  191.           @index = [@index - self.page_item_max, 0].max
  192.           self.top_row -= self.page_row_max
  193.         end
  194.       end
  195.     end
  196.     # 刷新帮助文本 (update_help 定义了继承目标)
  197.     if self.active and @help_window != nil
  198.       update_help
  199.     end
  200.     # 刷新光标矩形
  201.     update_cursor_rect
  202.   end
  203. end

  204. #==============================================================================
  205. # ■ Window_CommandCustom
  206. #------------------------------------------------------------------------------
  207. #  一般的命令选择行窗口。
  208. #==============================================================================

  209. class Window_CommandCustom < Window_SelectableCustom
  210.   #--------------------------------------------------------------------------
  211.   # ● 初始化对像
  212.   #     width    : 每格的的宽
  213.   #     row      : 行数   自己根据命令数算好行列的值,否则^^b
  214.   #     column   : 列数
  215.   #     commands : 命令字符串序列
  216.   #--------------------------------------------------------------------------
  217.   def initialize(width, row, column, commands)
  218.     # 由命令的个数计算出窗口的宽和高
  219.     super(0, 0, width * column + 32, row * 32 + 64)
  220.     @item_max = commands.size
  221.     @commands = commands
  222.     $row = row
  223.     $width = width
  224.     $column = column
  225.     self.contents = Bitmap.new(width * column , $row * 32+32)
  226.     refresh
  227.     self.index = 0
  228.   end
  229.   #--------------------------------------------------------------------------
  230.   # ● 刷新 写个描绘角色名称的带参方法,然后在refresh里执行。。。。
  231.   #--------------------------------------------------------------------------
  232.   def refresh
  233.     self.contents.clear
  234.     # 郁闷的方法   直接在这里加。。。总改有参数了吧。。。。。
  235.     refresh_name($my_actor_index)
  236.     for i in 0...@item_max
  237.       draw_item(i, normal_color)
  238.     end
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● 描绘角色名称  # 郁闷的方法
  242.   #     actor_index : 角色index
  243.   #--------------------------------------------------------------------------
  244.   def refresh_name(actor_index)
  245.     self.contents.clear
  246.     actor = $game_party.actors[actor_index]
  247.     self.contents.draw_text(4, 0, $width * $column, 32, actor.name, 1)
  248.   end
  249.   
  250.   #--------------------------------------------------------------------------
  251.   # ● 描绘项目
  252.   #     index : 项目编号
  253.   #     color : 文字色
  254.   #--------------------------------------------------------------------------
  255.   def draw_item(index, color)
  256.     self.contents.font.color = color
  257.     # 计算得出当前index所对应的内容所在的行
  258.     row_index = index / $column
  259.     # 根据余数得出所在的列
  260.     for y in 0...$column
  261.       if index % $column == y
  262.         rect = Rect.new(4 + (y * $width), 32 + 32 * row_index , $width, 32)
  263.         self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  264.         self.contents.draw_text(rect, @commands[index],1)
  265.         break
  266.       end
  267.     end
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 项目无效化
  271.   #     index : 项目编号
  272.   #--------------------------------------------------------------------------
  273.   def disable_item(index)
  274.     draw_item(index, disabled_color)
  275.   end
  276.   
  277.   #--------------------------------------------------------------------------
  278.   # ● 项目有效化
  279.   #     index : 项目编号
  280.   #--------------------------------------------------------------------------
  281.   def able_item(index)
  282.     draw_item(index, normal_color)
  283.   end
  284. end


  285. 二:参照说明,将在Scene_Battle 1类26行至34行用以下内容替换,注意脚本说明。
  286.     s1 = $data_system.words.attack
  287.     s2 = $data_system.words.skill
  288.     s3 = $data_system.words.guard
  289.     s4 = $data_system.words.item
  290.     s5 = "滥竽"
  291.     s6 = "充数"
  292.     $my_actor_index = 0
  293.     @actor_command_window = Window_CommandCustom.new(60, 2, 3, [s1, s2, s3, s4, s5, s6])
  294.     @actor_command_window.y = 192
  295.     @actor_command_window.back_opacity = 160
  296.     @actor_command_window.active = false
  297.     @actor_command_window.visible = false
  298. 三:分别在Scene_Battle 3类的37和62行@actor_index -= 1语句的后面插入以下内容。
  299.     $my_actor_index = @actor_index
复制代码

点评

这脚本我看着眼熟,但又好像和我之前写的不太一样……  发表于 2013-5-14 06:43
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
3
发表于 2013-5-13 20:36:48 | 只看该作者
第38行 @column_max = $column

至于 $column从哪来鬼才知道!

评分

参与人数 1星屑 +30 收起 理由
hcm + 30 感谢回答

查看全部评分

湿滑落式骑!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

4
发表于 2013-5-13 22:08:28 | 只看该作者
229行  $column = column
这不是通过参数传递进来了么

评分

参与人数 1星屑 +30 收起 理由
hcm + 30 感谢回答

查看全部评分

我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
193 小时
注册时间
2013-3-24
帖子
448
5
发表于 2013-5-14 01:18:32 | 只看该作者
222  def initialize(width, row, column, commands)

這不是你要使用這個東西時,就要把這參數給他了嗎?

评分

参与人数 1星屑 +30 收起 理由
hcm + 30 感谢回答

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
43 小时
注册时间
2013-4-28
帖子
32
6
 楼主| 发表于 2013-5-14 17:29:16 | 只看该作者
亿万星辰 发表于 2013-5-13 22:08
229行  $column = column
这不是通过参数传递进来了么

column给了变量$column直,那那个column是从哪里得到的值呢?好像很小白&……
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

7
发表于 2013-5-14 17:30:38 | 只看该作者
.new的方法里不是带了4个参数么………………

评分

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

查看全部评分

我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
43 小时
注册时间
2013-4-28
帖子
32
8
 楼主| 发表于 2013-5-14 17:36:03 | 只看该作者
亿万星辰 发表于 2013-5-14 17:30
.new的方法里不是带了4个参数么………………

哎呀我去,可算明白了,拜谢,今晚可算能睡着了!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-5 10:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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