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

Project1

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

[已经解决] 怎么制作带选项的窗口

[复制链接]

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
跳转到指定楼层
1
发表于 2013-7-4 15:58:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我想在菜单的命令窗口里添加一个“设置”选项,可以设置是否使用描边字(因为用描边字太卡了)
然后想弄一个设置的选项框,可是发现窗口无法消除,而且……反正就是各种各样的问题,希望有人能弄成我想要的效果……
谢了。
范例: Project2.zip (200.76 KB, 下载次数: 38)
我改了的地方都用#*******标注了

点评

话说xp区版主怎么只剩一个了  发表于 2013-7-5 16:43

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
2
发表于 2013-7-4 18:26:45 | 只看该作者
这个是对下面解答过程的打包,用word就可以打开
解答记录.7z (330.51 KB, 下载次数: 28)


首先根据提问者的描述,找到了标记部分

根据增加的s6继续往下

测试

问题:1.长度超出
        2.非常糟糕的是每次按设置都会重新新建一个窗口

因为没法再原来的基础上改所以去掉了全部修改
说明下问题:
      1.update_command这个方法用于命令窗口的刷新

在这里主要都是中断当前窗口之后


由此,你应该明白这里是不适合写你的脚本的。

再一说

解决

正误

删掉了原来的脚本


开始写新的脚本

测试

模仿上面写了一段


就这么写完之后测试

接下来解决这个问题


完毕


下面是改完的脚本,替换你写的脚本即可

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  处理菜单画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Menu
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #     menu_index : 命令光标的初期位置
  11.   #--------------------------------------------------------------------------
  12.   def initialize(menu_index = 0)
  13.     @menu_index = menu_index
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 主处理
  17.   #--------------------------------------------------------------------------
  18.   def main
  19.     # 生成命令窗口
  20.     s1 = $data_system.words.item
  21.     s2 = $data_system.words.skill
  22.     s3 = $data_system.words.equip
  23.     s4 = "状态"
  24.     s5 = "存档"
  25.     s6 = "设置"#**********
  26.     s7 = "结束游戏"
  27.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,s7])#*******
  28.     @command_window.index = @menu_index
  29.     @command_window.height = 224
  30.     # 同伴人数为 0 的情况下
  31.     if $game_party.actors.size == 0
  32.       # 物品、特技、装备、状态无效化
  33.       @command_window.disable_item(0)
  34.       @command_window.disable_item(1)
  35.       @command_window.disable_item(2)
  36.       @command_window.disable_item(3)
  37.     end
  38.  
  39.     @opt_str = ["描边字 开","描边字 关"]
  40.     @opt_win = Window_Command.new(160,[ @opt_str[$stroke ?0:1]])
  41.     @opt_win.visible = false
  42.     @opt_win.active = false
  43.  
  44.  
  45.     # 禁止存档的情况下
  46.     if $game_system.save_disabled
  47.       # 存档无效
  48.       @command_window.disable_item(4)
  49.     end
  50.     # 生成游戏时间窗口
  51.     @playtime_window = Window_PlayTime.new
  52.     @playtime_window.x = 0
  53.     @playtime_window.y = 224
  54.     # 生成步数窗口
  55.     @steps_window = Window_Steps.new
  56.     @steps_window.x = 0
  57.     @steps_window.y = 320
  58.     # 生成金钱窗口
  59.     @gold_window = Window_Gold.new
  60.     @gold_window.x = 0
  61.     @gold_window.y = 416
  62.     # 生成状态窗口
  63.     @status_window = Window_MenuStatus.new
  64.     @status_window.x = 160
  65.     @status_window.y = 0
  66.     # 执行过渡
  67.     Graphics.transition
  68.     # 主循环
  69.     loop do
  70.       # 刷新游戏画面
  71.       Graphics.update
  72.       # 刷新输入信息
  73.       Input.update
  74.       # 刷新画面
  75.       update
  76.       # 如果切换画面就中断循环
  77.       if $scene != self
  78.         break
  79.       end
  80.     end
  81.     # 准备过渡
  82.     Graphics.freeze
  83.     # 释放窗口
  84.     @command_window.dispose
  85.     @playtime_window.dispose
  86.     @steps_window.dispose
  87.     @gold_window.dispose
  88.     @status_window.dispose
  89.   end
  90.   #--------------------------------------------------------------------------
  91.   # ● 刷新画面
  92.   #--------------------------------------------------------------------------
  93.   def update
  94.     # 刷新窗口
  95.     @command_window.update
  96.     @playtime_window.update
  97.     @steps_window.update
  98.     @gold_window.update
  99.     @status_window.update
  100.     # 命令窗口被激活的情况下: 调用 update_command
  101.     if @command_window.active
  102.       update_command
  103.       return
  104.     end
  105.     # 状态窗口被激活的情况下: 调用 update_status
  106.     if @status_window.active
  107.       update_status
  108.       return
  109.     end
  110.     #opt窗口被激活时,用ud_opt
  111.     if @opt_win.active
  112.       ud_opt
  113.       return
  114.     end
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 刷新画面 (命令窗口被激活的情况下)
  118.   #--------------------------------------------------------------------------
  119.   def update_command
  120.     # 按下 B 键的情况下
  121.     if Input.trigger?(Input::B)
  122.       # 演奏取消 SE
  123.       $game_system.se_play($data_system.cancel_se)
  124.       # 切换的地图画面
  125.       $scene = Scene_Map.new
  126.       return
  127.     end
  128.     # 按下 C 键的情况下
  129.     if Input.trigger?(Input::C)
  130.       # 同伴人数为 0、存档、游戏结束以外的场合
  131.       if $game_party.actors.size == 0 and @command_window.index < 4
  132.         # 演奏冻结 SE
  133.         $game_system.se_play($data_system.buzzer_se)
  134.         return
  135.       end
  136.       # 命令窗口的光标位置分支
  137.       case @command_window.index
  138.       when 0  # 物品
  139.         # 演奏确定 SE
  140.         $game_system.se_play($data_system.decision_se)
  141.         # 切换到物品画面
  142.         $scene = Scene_Item.new
  143.       when 1  # 特技
  144.         # 演奏确定 SE
  145.         $game_system.se_play($data_system.decision_se)
  146.         # 激活状态窗口
  147.         @command_window.active = false
  148.         @status_window.active = true
  149.         @status_window.index = 0
  150.       when 2  # 装备
  151.         # 演奏确定 SE
  152.         $game_system.se_play($data_system.decision_se)
  153.         # 激活状态窗口
  154.         @command_window.active = false
  155.         @status_window.active = true
  156.         @status_window.index = 0
  157.       when 3  # 状态
  158.         # 演奏确定 SE
  159.         $game_system.se_play($data_system.decision_se)
  160.         # 激活状态窗口
  161.         @command_window.active = false
  162.         @status_window.active = true
  163.         @status_window.index = 0
  164.       when 4  # 存档
  165.         # 禁止存档的情况下
  166.         if $game_system.save_disabled
  167.           # 演奏冻结 SE
  168.           $game_system.se_play($data_system.buzzer_se)
  169.           return
  170.         end
  171.         # 演奏确定 SE
  172.         $game_system.se_play($data_system.decision_se)
  173.         # 切换到存档画面
  174.         $scene = Scene_Save.new
  175.       when 6  # 游戏结束
  176.         # 演奏确定 SE
  177.         $game_system.se_play($data_system.decision_se)
  178.         # 切换到游戏结束画面
  179.         $scene = Scene_End.new
  180.       when 5#********************
  181.         $game_system.se_play($data_system.decision_se)
  182.         #冻结cmd窗口
  183.         @command_window.active = false
  184.         #隐藏cmd窗口
  185.         @command_window.visible = false
  186.         #激活opt窗口
  187.         @opt_win.active = true
  188.         #显示opt窗口
  189.         @opt_win.visible = true
  190.       end
  191.       return
  192.     end
  193.   end
  194.   def ud_opt
  195.     # 按下 B 键的情况下
  196.     if Input.trigger?(Input::B)
  197.       # 演奏取消 SE
  198.       $game_system.se_play($data_system.cancel_se)
  199.       # 激活命令窗口
  200.       @command_window.active = true
  201.       # 显示命令窗口
  202.       @command_window.visible = true
  203.       # 隐藏opt窗口
  204.       @opt_win.visible = false
  205.       # 冻结opt窗口
  206.       @opt_win.active = true
  207.       return
  208.     end
  209.     # 按下 C 键的情况下
  210.     if Input.trigger?(Input::C)
  211.       # 演奏确定 SE
  212.         $game_system.se_play($data_system.decision_se)
  213.         #改变$stroke的值
  214.         $stroke = !$stroke
  215.         #刷新opt窗口(因为懒得改写Windows_Command所以就蛋疼点重新生成好了
  216.          #释放
  217.          @opt_win.dispose
  218.          #重生成
  219.          @opt_win = Window_Command.new(160,[ @opt_str[$stroke ?0:1]])
  220.     end
  221.   end      
  222.  
  223.   #--------------------------------------------------------------------------
  224.   # ● 刷新画面 (状态窗口被激活的情况下)
  225.   #--------------------------------------------------------------------------
  226.   def update_status
  227.     # 按下 B 键的情况下
  228.     if Input.trigger?(Input::B)
  229.       # 演奏取消 SE
  230.       $game_system.se_play($data_system.cancel_se)
  231.       # 激活命令窗口
  232.       @command_window.active = true
  233.       @status_window.active = false
  234.       @status_window.index = -1
  235.       return
  236.     end
  237.     # 按下 C 键的情况下
  238.     if Input.trigger?(Input::C)
  239.       # 命令窗口的光标位置分支
  240.       case @command_window.index
  241.       when 1  # 特技
  242.         # 本角色的行动限制在 2 以上的情况下
  243.         if $game_party.actors[@status_window.index].restriction >= 2
  244.           # 演奏冻结 SE
  245.           $game_system.se_play($data_system.buzzer_se)
  246.           return
  247.         end
  248.         # 演奏确定 SE
  249.         $game_system.se_play($data_system.decision_se)
  250.         # 切换到特技画面
  251.         $scene = Scene_Skill.new(@status_window.index)
  252.       when 2  # 装备
  253.         # 演奏确定 SE
  254.         $game_system.se_play($data_system.decision_se)
  255.         # 切换的装备画面
  256.         $scene = Scene_Equip.new(@status_window.index)
  257.       when 3  # 状态
  258.         # 演奏确定 SE
  259.         $game_system.se_play($data_system.decision_se)
  260.         # 切换到状态画面
  261.         $scene = Scene_Status.new(@status_window.index)
  262.       end
  263.       return
  264.     end
  265.   end
  266. end

点评

一篇很好的添加窗口选项的教程。  发表于 2013-7-10 16:42
谢谢,十分感谢您的详细解答和耐心…… 认可答案。  发表于 2013-7-5 16:34

评分

参与人数 3星屑 +225 梦石 +1 收起 理由
弗雷德 + 105 + 1 认可答案
你最珍贵 + 20 我很赞同
亿万星辰 + 100 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
3
 楼主| 发表于 2013-7-10 13:26:34 | 只看该作者
克莉丝 发表于 2013-7-4 18:26
这个是对下面解答过程的打包,用word就可以打开

额,不好意思,再追问一下,因为又出问题了。。。。。。
如果把新生成的“设置”窗口增加选项,那么光标貌似无法移到其他选项上,而且光标也没有闪烁的效果。。。。。
这是怎么回事?
Project2.zip (201.02 KB, 下载次数: 27)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
帖子
1524
4
发表于 2013-7-10 20:11:29 | 只看该作者
因为我懒得给那个东西写滚动
自己往我名片里找qq

点评

额,不好意思,自己解决了……不过还是很感谢……  发表于 2013-7-14 10:46
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
995
在线时间
180 小时
注册时间
2013-2-16
帖子
176
5
 楼主| 发表于 2013-7-11 15:20:42 | 只看该作者
克莉丝 发表于 2013-7-10 20:11
因为我懒得给那个东西写滚动
自己往我名片里找qq

能不能说下怎么弄?真心不会啊……
加qq很麻烦的……
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 06:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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