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

Project1

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

- -0 求助 关于商店窗口外观

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
11 小时
注册时间
2008-3-24
帖子
22
跳转到指定楼层
1
发表于 2008-4-6 20:47:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
{/ll}请问 怎样才能改变商店窗口?原来那个不方便,
本来一进入有三个选项 ‘买’ ‘卖’ ‘取消’ 点C下面才有列表

我想改成 一开始就显示  列表(默认是买的列表)
按在左右键切换‘买’ ‘卖’ ‘取消’(默认是买)
按上下选择下面的商品(当然切换‘取消’是没有)
然后按C购买(当切换到‘买)或出售(当切换到‘卖)或者退出商店(当切换到‘取消)
按X也可以直接退出

就是这个效果,不知道大家明白我的意思吗?如果不明白我再补充
先谢过了{/ll}
版务信息:本贴由楼主自主结贴~

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

2
发表于 2008-4-6 21:02:55 | 只看该作者
只是重写Scene而已,并不困难。不过要改的地方很多= =
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

3
发表于 2008-4-6 21:19:29 | 只看该作者

  1. #==============================================================================
  2. # ■ Scene_Shop
  3. #------------------------------------------------------------------------------
  4. #  处理商店画面的类。
  5. #==============================================================================

  6. class Scene_Shop
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成帮助窗口
  12.     @help_window = Window_Help.new
  13.     # 生成指令窗口
  14.     @command_window = Window_ShopCommand.new
  15.     # 生成金钱窗口
  16.     @gold_window = Window_Gold.new
  17.     @gold_window.x = 480
  18.     @gold_window.y = 64
  19.     # 生成时间窗口
  20.     @dummy_window = Window_Base.new(0, 128, 640, 352)
  21.     # 生成购买窗口
  22.     @buy_window = Window_ShopBuy.new($game_temp.shop_goods)
  23.     @buy_window.active = true
  24.     @buy_window.visible = true
  25.     @buy_window.help_window = @help_window
  26.     # 生成卖出窗口
  27.     @sell_window = Window_ShopSell.new
  28.     @sell_window.active = false
  29.     @sell_window.visible = false
  30.     @sell_window.help_window = @help_window
  31.     # 生成数量输入窗口
  32.     @number_window = Window_ShopNumber.new
  33.     @number_window.active = false
  34.     @number_window.visible = false
  35.     # 生成状态窗口
  36.     @status_window = Window_ShopStatus.new
  37.     @status_window.visible = false
  38.     # 执行过渡
  39.     Graphics.transition
  40.     # 主循环
  41.     loop do
  42.       # 刷新游戏画面
  43.       Graphics.update
  44.       # 刷新输入信息
  45.       Input.update
  46.       # 刷新画面
  47.       update
  48.       # 如果画面切换的话就中断循环
  49.       if $scene != self
  50.         break
  51.       end
  52.     end
  53.     # 准备过渡
  54.     Graphics.freeze
  55.     # 释放窗口
  56.     @help_window.dispose
  57.     @command_window.dispose
  58.     @gold_window.dispose
  59.     @dummy_window.dispose
  60.     @buy_window.dispose
  61.     @sell_window.dispose
  62.     @number_window.dispose
  63.     @status_window.dispose
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 刷新画面
  67.   #--------------------------------------------------------------------------
  68.   def update
  69.     # 刷新窗口
  70.     @help_window.update
  71.     @command_window.update
  72.     @gold_window.update
  73.     @dummy_window.update
  74.     @buy_window.update
  75.     @sell_window.update
  76.     @number_window.update
  77.     @status_window.update
  78.     # 指令窗口激活的情况下: 调用 update_command
  79.     if @command_window.active
  80.       update_command
  81. #      return
  82.     end
  83.     if @command_window.index == 2 and Input.trigger?(Input::C)
  84.         # 演奏确定 SE
  85.         $game_system.se_play($data_system.decision_se)
  86.         # 切换到地图画面
  87.         $scene = Scene_Map.new
  88.       return
  89.     end
  90.     # 购买窗口激活的情况下: 调用 update_buy
  91.     if @buy_window.active
  92.       update_buy
  93.       return
  94.     end
  95.     # 卖出窗口激活的情况下: 调用 update_sell
  96.     if @sell_window.active
  97.       update_sell
  98.       return
  99.     end
  100.     # 个数输入窗口激活的情况下: 调用 update_number
  101.     if @number_window.active
  102.       update_number
  103.       return
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 刷新画面 (指令窗口激活的情况下)
  108.   #--------------------------------------------------------------------------
  109.   def update_command
  110.     # 按下 B 键的情况下
  111.     if Input.trigger?(Input::B)
  112.       # 演奏取消 SE
  113.       $game_system.se_play($data_system.cancel_se)
  114.       # 切换到地图画面
  115.       $scene = Scene_Map.new
  116.       return
  117.     end
  118.     # 按下 左 键的情况下
  119.     if Input.trigger?(Input::LEFT)
  120. #      @command_window.index = (@command_window.index + 2) % 3
  121.       # 命令窗口光标位置分支
  122.       case @command_window.index
  123.       when 0  # 购买
  124.         # 演奏确定 SE
  125.         $game_system.se_play($data_system.decision_se)
  126.         # 窗口状态转向购买模式
  127. #        @command_window.active = false
  128.         @dummy_window.visible = false
  129.         @buy_window.active = true
  130.         @buy_window.visible = true
  131.         @sell_window.active = false
  132.         @sell_window.visible = false
  133.         @buy_window.refresh
  134.         @status_window.visible = true
  135.       when 1  # 卖出
  136.         # 演奏确定 SE
  137.         $game_system.se_play($data_system.decision_se)
  138.         # 窗口状态转向卖出模式
  139. #        @command_window.active = false
  140.         @dummy_window.visible = false
  141.         @sell_window.active = true
  142.         @sell_window.visible = true
  143.         @buy_window.active = false
  144.         @buy_window.visible = false
  145.         @number_window.active = false
  146.         @number_window.visible = false
  147.         @status_window.active = false
  148.         @status_window.visible = false
  149.          @sell_window.refresh
  150. #      when 2  # 取消
  151.         # 演奏确定 SE
  152. #        $game_system.se_play($data_system.decision_se)
  153.         # 切换到地图画面
  154. #        $scene = Scene_Map.new
  155.       end
  156.       return
  157.     end
  158.     # 按下 右 键的情况下
  159.     if Input.trigger?(Input::RIGHT)
  160.   #    @command_window.index = (@command_window.index + 1) % 3
  161.       # 命令窗口光标位置分支
  162.       case @command_window.index
  163.       when 0  # 购买
  164.         # 演奏确定 SE
  165.         $game_system.se_play($data_system.decision_se)
  166.         # 窗口状态转向购买模式
  167. #        @command_window.active = false
  168.         @dummy_window.visible = false
  169.         @buy_window.active = true
  170.         @buy_window.visible = true
  171.         @buy_window.refresh
  172.         @sell_window.active = false
  173.         @sell_window.visible = false
  174.         @status_window.visible = true
  175.       when 1  # 卖出
  176.         # 演奏确定 SE
  177.         $game_system.se_play($data_system.decision_se)
  178.         # 窗口状态转向卖出模式
  179. #        @command_window.active = false
  180.         @dummy_window.visible = false
  181.         @buy_window.active = false
  182.         @buy_window.visible = false
  183.         @number_window.active = false
  184.         @number_window.visible = false
  185.         @status_window.active = false
  186.         @status_window.visible = false
  187.         @sell_window.active = true
  188.         @sell_window.visible = true
  189.         @sell_window.refresh
  190. #      when 2  # 取消
  191.         # 演奏确定 SE
  192. #        $game_system.se_play($data_system.decision_se)
  193.         # 切换到地图画面
  194. #        $scene = Scene_Map.new
  195.       end
  196.       return
  197.     end
  198.   end
  199.   #--------------------------------------------------------------------------
  200.   # ● 刷新画面 (购买窗口激活的情况下)
  201.   #--------------------------------------------------------------------------
  202.   def update_buy
  203.     # 设置状态窗口的物品
  204.     @status_window.item = @buy_window.item
  205.     # 按下 B 键的情况下
  206.     if Input.trigger?(Input::B)
  207.       # 演奏取消 SE
  208.       $game_system.se_play($data_system.cancel_se)
  209.       # 窗口状态转向初期模式
  210.       @command_window.active = true
  211.       @dummy_window.visible = true
  212.       @buy_window.active = false
  213.       @buy_window.visible = false
  214.       @status_window.visible = false
  215.       @status_window.item = nil
  216.       # 删除帮助文本
  217.       @help_window.set_text("")
  218.       return
  219.     end
  220.     # 按下 C 键的情况下
  221.     if Input.trigger?(Input::C)
  222.       # 获取物品
  223.       @item = @buy_window.item
  224.       # 物品无效的情况下、或者价格在所持金以上的情况下
  225.       if @item == nil or @item.price > $game_party.gold
  226.         # 演奏冻结 SE
  227.         $game_system.se_play($data_system.buzzer_se)
  228.         return
  229.       end
  230.       # 获取物品所持数
  231.       case @item
  232.       when RPG::Item
  233.         number = $game_party.item_number(@item.id)
  234.       when RPG::Weapon
  235.         number = $game_party.weapon_number(@item.id)
  236.       when RPG::Armor
  237.         number = $game_party.armor_number(@item.id)
  238.       end
  239.       # 如果已经拥有了 99 个情况下
  240.       if number == 99
  241.         # 演奏冻结 SE
  242.         $game_system.se_play($data_system.buzzer_se)
  243.         return
  244.       end
  245.       # 演奏确定 SE
  246.       $game_system.se_play($data_system.decision_se)
  247.       # 计算可以最多购买的数量
  248.       max = @item.price == 0 ? 99 : $game_party.gold / @item.price
  249.       max = [max, 99 - number].min
  250.       # 窗口状态转向数值输入模式
  251.       @buy_window.active = false
  252.       @buy_window.visible = false
  253.       @number_window.set(@item, max, @item.price)
  254.       @number_window.active = true
  255.       @number_window.visible = true
  256.     end
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● 画面更新 (卖出窗口激活的情况下)
  260.   #--------------------------------------------------------------------------
  261.   def update_sell
  262.     # 按下 B 键的情况下
  263.     if Input.trigger?(Input::B)
  264.       # 演奏取消 SE
  265.       $game_system.se_play($data_system.cancel_se)
  266.       # 窗口状态转向初期模式
  267.       @command_window.active = true
  268.       @dummy_window.visible = true
  269.       @sell_window.active = false
  270.       @sell_window.visible = false
  271.       @status_window.item = nil
  272.       # 删除帮助文本
  273.       @help_window.set_text("")
  274.       return
  275.     end
  276.     # 按下 C 键的情况下
  277.     if Input.trigger?(Input::C)
  278.       # 获取物品
  279.       @item = @sell_window.item
  280.       # 设置状态窗口的物品
  281.       @status_window.item = @item
  282.       # 物品无效的情况下、或者价格为 0 (不能卖出) 的情况下
  283.       if @item == nil or @item.price == 0
  284.         # 演奏冻结 SE
  285.         $game_system.se_play($data_system.buzzer_se)
  286.         return
  287.       end
  288.       # 演奏确定 SE
  289.       $game_system.se_play($data_system.decision_se)
  290.       # 获取物品的所持数
  291.       case @item
  292.       when RPG::Item
  293.         number = $game_party.item_number(@item.id)
  294.       when RPG::Weapon
  295.         number = $game_party.weapon_number(@item.id)
  296.       when RPG::Armor
  297.         number = $game_party.armor_number(@item.id)
  298.       end
  299.       # 最大卖出个数 = 物品的所持数
  300.       max = number
  301.       # 窗口状态转向个数输入模式
  302.       @sell_window.active = false
  303.       @sell_window.visible = false
  304.       @number_window.set(@item, max, @item.price / 2)
  305.       @number_window.active = true
  306.       @number_window.visible = true
  307.       @status_window.visible = true
  308.     end
  309.   end
  310.   #--------------------------------------------------------------------------
  311.   # ● 刷新画面 (个数输入窗口激活的情况下)
  312.   #--------------------------------------------------------------------------
  313.   def update_number
  314.     # 按下 B 键的情况下
  315.     if Input.trigger?(Input::B)
  316.       # 演奏取消 SE
  317.       $game_system.se_play($data_system.cancel_se)
  318.       # 设置个数输入窗口为不活动·非可视状态
  319.       @number_window.active = false
  320.       @number_window.visible = false
  321.       # 命令窗口光标位置分支
  322.       case @command_window.index
  323.       when 0  # 购买
  324.         # 窗口状态转向购买模式
  325.         @buy_window.active = true
  326.         @buy_window.visible = true
  327.       when 1  # 卖出
  328.         # 窗口状态转向卖出模式
  329.         @sell_window.active = true
  330.         @sell_window.visible = true
  331.         @status_window.visible = false
  332.       end
  333.       return
  334.     end
  335.     # 按下 C 键的情况下
  336.     if Input.trigger?(Input::C)
  337.       # 演奏商店 SE
  338.       $game_system.se_play($data_system.shop_se)
  339.       # 设置个数输入窗口为不活动·非可视状态
  340.       @number_window.active = false
  341.       @number_window.visible = false
  342.       # 命令窗口光标位置分支
  343.       case @command_window.index
  344.       when 0  # 购买
  345.         # 购买处理
  346.         $game_party.lose_gold(@number_window.number * @item.price)
  347.         case @item
  348.         when RPG::Item
  349.           $game_party.gain_item(@item.id, @number_window.number)
  350.         when RPG::Weapon
  351.           $game_party.gain_weapon(@item.id, @number_window.number)
  352.         when RPG::Armor
  353.           $game_party.gain_armor(@item.id, @number_window.number)
  354.         end
  355.         # 刷新各窗口
  356.         @gold_window.refresh
  357.         @buy_window.refresh
  358.         @status_window.refresh
  359.         # 窗口状态转向购买模式
  360.         @buy_window.active = true
  361.         @buy_window.visible = true
  362.       when 1  # 卖出
  363.         # 卖出处理
  364.         $game_party.gain_gold(@number_window.number * (@item.price / 2))
  365.         case @item
  366.         when RPG::Item
  367.           $game_party.lose_item(@item.id, @number_window.number)
  368.         when RPG::Weapon
  369.           $game_party.lose_weapon(@item.id, @number_window.number)
  370.         when RPG::Armor
  371.           $game_party.lose_armor(@item.id, @number_window.number)
  372.         end
  373.         # 刷新各窗口
  374.         @gold_window.refresh
  375.         @sell_window.refresh
  376.         @status_window.refresh
  377.         # 窗口状态转向卖出模式
  378.         @sell_window.active = true
  379.         @sell_window.visible = true
  380.         @status_window.visible = false
  381.       end
  382.       return
  383.     end
  384.   end
  385. end
复制代码


TO lz:我尽力了。看来有个地方你没考虑到。就是在卖东西的时候栏位有两栏,需要左右键切换的。
所以按照你说的改就会出事.你测试一下这个脚本就明白了.
要修正这个效果就把我以上贴出来的脚本的Input.trigger?(Input::LEFT)和Input.trigger?(Input::RIGHT)两行改成其他键,比如shift之类。
要么就把卖东西的那个窗口改成只有一栏的。
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
11 小时
注册时间
2008-3-24
帖子
22
4
 楼主| 发表于 2008-4-6 21:35:09 | 只看该作者
我可以再麻烦您一件事情吗?

把卖的效果改成
按下到右边,如果已经在右边就到下一行的左边,以此类推,
到最后一个时,按下返回第一行左边。

按上到左边,如果已经在左边就到上一行的右边,以此类推,
到最前一个时,按上返回最后一行右边(如果最后一行只有左边,就到最后一行左边)。

可以理解吗? 麻烦了
{/ll}好报有好人
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

5
发表于 2008-4-6 21:39:02 | 只看该作者
明白了。
但是要重写默认Window_Selectable的功能很麻烦

你参考着改Window_ShopSell好了= =
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
11 小时
注册时间
2008-3-24
帖子
22
6
 楼主| 发表于 2008-4-6 21:48:18 | 只看该作者
{/dk}Window_ShopSell完全看不懂  55555~~~~~~~~~~哪位可以帮我改啊 我会感激他的
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

7
发表于 2008-4-6 21:48:57 | 只看该作者
看不懂就用默认的商店好了= =bb
感觉这个修改根本完全没有必要还把操作弄复杂了OTZ
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
11 小时
注册时间
2008-3-24
帖子
22
8
 楼主| 发表于 2008-4-6 21:55:09 | 只看该作者
那让我最后问一个问题好吗? 除了商店的卖以外 还有那些地方的列是2以上的?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

9
发表于 2008-4-6 21:56:53 | 只看该作者
window_skill和window_item
要改列数的话改那个@column_max,并且在draw_item的部分改掉其中的x,y即可
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

冰王子

梦石
0
星屑
50
在线时间
34 小时
注册时间
2008-1-27
帖子
1875
10
发表于 2008-4-6 21:57:02 | 只看该作者
战斗开始时的,战斗/逃跑
不常在线,有事PM
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-29 02:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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