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

Project1

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

如何修改装备窗口与怎么做选择对话框

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-6-10
帖子
44
跳转到指定楼层
1
发表于 2007-7-30 06:38:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-6-10
帖子
44
7
 楼主| 发表于 2007-8-2 02:58:48 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
452
在线时间
191 小时
注册时间
2006-1-8
帖子
53
6
发表于 2007-8-1 19:58:34 | 只看该作者

  1. #==============================================================================
  2. # ■ Window_Selectable
  3. #------------------------------------------------------------------------------
  4. #  拥有光标的移动以及滚动功能的窗口类。
  5. #==============================================================================

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

  202. class Pop_Window < Window_Selectable_Defined
  203.   
  204.   def initialize
  205.     super(0,0,640,480)
  206.     @item_max = $game_party.actors.size
  207.     @gap = 116
  208.     @cursor_height = 96
  209.     @column_max = 1
  210.     refresh
  211.     self.index = 0
  212.   end
  213.   
  214.   def refresh
  215.     self.contents = Bitmap.new(width - 32, row_max * 116)
  216.     self.contents.clear
  217.     for i in 0...$game_party.actors.size
  218.       x = 4
  219.       y = i * 116
  220.       actor = $game_party.actors[i]
  221.       draw_actor_graphic(actor, x - 40, y + 80)
  222.       draw_actor_name(actor, x, y)
  223.       draw_actor_class(actor, x + 144, y)
  224.       draw_actor_level(actor, x, y + 32)
  225.       draw_actor_state(actor, x + 90, y + 32)
  226.       draw_actor_exp(actor, x, y + 64)
  227.       draw_actor_hp(actor, x + 236, y + 32)
  228.       draw_actor_sp(actor, x + 236, y + 64)
  229.     end
  230.   end
  231. end

  232. class Scene_SelecPop
  233.   def main
  234.     @pop_window = Pop_Window.new
  235.     @pop_window.active = true
  236.     @cmd = Window_Command.new(96,["离队","取消"])
  237.     @cmd.visible = false
  238.     @cmd.active = false
  239.     # 执行过渡
  240.     Graphics.transition
  241.     # 主循环
  242.     loop do
  243.       # 刷新游戏画面
  244.       Graphics.update
  245.       # 刷新输入信息
  246.       Input.update
  247.       # 刷新画面
  248.       update
  249.       # 如果切换画面就中断循环
  250.       if $scene != self
  251.         break
  252.       end
  253.     end
  254.     # 准备过渡
  255.     Graphics.freeze
  256.     @pop_window.dispose
  257.     @cmd.dispose
  258.   end
  259.   
  260.   def update
  261.     @pop_window.update
  262.     @cmd.update
  263.     if @pop_window.active
  264.       update_pop
  265.       return
  266.     end
  267.     if @cmd.active
  268.       update_cmd
  269.       return
  270.     end
  271.   end
  272.   
  273.   def update_pop
  274.     if Input.trigger?(Input::C)
  275.       $game_system.se_play($data_system.decision_se)
  276.       @pop_window.active = false
  277.       @cmd.visible = true
  278.       @cmd.x = 500
  279.       @cmd.y = [email protected]
  280.       @cmd.active = true
  281.       return
  282.     end  
  283.     if Input.trigger?(Input::B)
  284.       $game_system.se_play($data_system.cancel_se)
  285.       $scene=Scene_Map.new
  286.     end
  287.   end
  288.   
  289.   def update_cmd
  290.     if Input.trigger?(Input::C)
  291.       $game_system.se_play($data_system.decision_se)
  292.       case @cmd.index
  293.       when 0
  294.         actor = $game_party.actors[@pop_window.index]
  295.         $game_party.remove_actor(actor.id)
  296.         $scene=Scene_SelecPop.new
  297.       when 1
  298.         @cmd.visible = false
  299.         @cmd.active = false
  300.         @pop_window.active = true
  301.         return
  302.       end
  303.     end
  304.     if Input.trigger?(Input::B)
  305.       $game_system.se_play($data_system.cancel_se)
  306.       @cmd.visible = false
  307.       @cmd.active = false
  308.       @pop_window.active = true
  309.       return
  310.     end
  311.   end
  312. end

复制代码


# 呼出 $scene = Scene_SelecPop.new


系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
95
在线时间
49 小时
注册时间
2006-5-7
帖子
526
5
发表于 2007-8-1 19:07:10 | 只看该作者
以下引用dfdcvcvxv于2007-7-30 18:07:30的发言:

我那个游戏就是自由度比较高的,就换人来说吧!专门有一个场所(我都做好了)里面有候选人(都是一个个事件),你如果想让谁加入就跟他说话,但平时你不想要他就随时可以让他离开,就像三国群侠传!!所以我才有那个想法,希望大家一定要帮我!!积分都可以分享!!


照这样的话队友更换直接用事件做好了,还不会有BUG
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-6-10
帖子
44
4
 楼主| 发表于 2007-7-31 02:07:30 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

3
发表于 2009-6-12 08:00:00 | 只看该作者
1、这个逻辑比较复杂。不知你有没有注意原有的所有功能,最多按两下回车,而你这个是三下。所以需要添加一个过程。
我不知道你本身水平如何,如果已经做过一些相关脚本或者学过一些了,可能讲两三句就行了。从0开始讲起的话,我建议你把自己的300积分追加到悬赏里面。因为这个效果还是颇需要修改不少地方的。
如果仅仅为了实现功能,那么:http://rpg.blue/web/htm/news437.htm,http://rpg.blue/web/htm/news251.htm,http://rpg.blue/web/htm/news22.htm + http://rpg.blue/web/htm/news23.htm,是你可以参考的几个连接。

附带一提,你有没想过你这样让人离队之后她/他就永远消失了?如果剧情之前玩家把人物离队了怎么办?

2、这个非常简单,只要把Window_EquipItem里面17行的@column_max = 2改为@column_max = 1
不过描绘还会有少许错误,需要顺便修改73行的y = index / 2 * 32,改为y = index / 1 * 32
OK,这样即可。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2007-6-10
帖子
44
2
 楼主| 发表于 2007-7-30 06:38:24 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2025-1-13 13:18

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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