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

Project1

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

[已经解决] 请教怎么建立一个选择防具的窗口

[复制链接]

Lv1.梦旅人

◎无名侠客

梦石
0
星屑
50
在线时间
49 小时
注册时间
2007-6-7
帖子
347
跳转到指定楼层
1
发表于 2014-9-19 15:34:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 七禽七兽 于 2014-9-19 15:45 编辑

与事件NPC对话,显示一窗口,窗口中只显示数据库编号为变量1和变量3的防具(如果变量为0就不显示)。选中该防具按确定键,角色就得到该防具,同时窗口中的防具数量-1

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 手动认可奖励

查看全部评分

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

2
发表于 2014-9-19 15:54:10 | 只看该作者
本帖最后由 RyanBern 于 2014-9-20 11:43 编辑

简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:
  1. $scene.show_armor_select
复制代码
可以调出防具选择对话框,选择完毕后,被选择的防具会自动进入背包。(也可以按ESC取消选择)
按照要求,窗口显示的内容被限制在1~3号变量所代表的防具。
RUBY 代码复制
  1. class Game_System
  2.   alias rb_initialize initialize
  3.   def initialize
  4.     @armor_storage = {}
  5.     rb_initialize
  6.   end
  7.   def armor_storage(armor_id)
  8.     @armor_storage = {} if @armor_storage.nil?
  9.     return @armor_storage[armor_id].nil? ? 2 : @armor_storage[armor_id]
  10.   end
  11.   def storage_export(id, number)
  12.     @armor_storage[id] = [armor_storage(id) - number, 0].max
  13.   end
  14. end
  15. class Window_ArmorSelect < Window_Selectable
  16.   def initialize
  17.     super(0, 0, 256, 32)
  18.     self.x = 320 - width / 2
  19.     self.y = 240 - height / 2
  20.     self.visible = false
  21.     self.active = false
  22.     self.index = 0
  23.     refresh
  24.   end
  25.   def refresh
  26.     @data = []
  27.     (1..3).each do |i|
  28.       id = $game_variables[i]
  29.       armor = $data_armors[id]
  30.       @data.push($data_armors[id]) unless armor.nil? || $game_system.armor_storage(id) == 0
  31.     end
  32.     self.height = (1 + @data.size) * 32
  33.     if self.contents != nil
  34.       self.contents.dispose
  35.       self.contents = nil
  36.     end
  37.     @item_max = @data.size
  38.     if @item_max > 0
  39.       self.contents = Bitmap.new(width - 32, @item_max * 32)
  40.       (0...@item_max).each do |i|
  41.         draw_item(i)
  42.       end
  43.     end
  44.   end
  45.   def draw_item(index)
  46.     item = @data[index]
  47.     if item == nil
  48.       return
  49.     end
  50.     x = 4
  51.     y = 32 * index
  52.     color = $game_system.armor_storage(item.id) > 0 ? normal_color : disabled_color
  53.     self.contents.font.color = color
  54.     opacity = $game_system.armor_storage(item.id) > 0 ? 255 : 128
  55.     bitmap = RPG::Cache.icon(item.icon_name)
  56.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  57.     self.contents.draw_text(x + 28, y, 160, 32, item.name)
  58.     text = ": " + $game_system.armor_storage(item.id).to_s
  59.     self.contents.draw_text(0, y, width - 32, 32, text, 2)
  60.   end
  61.   def armor
  62.     @data[self.index]
  63.   end
  64.   def show
  65.     refresh
  66.     self.visible = true
  67.     self.active = true
  68.   end
  69. end
  70. class Scene_Map
  71.   alias rb_main main
  72.   def main
  73.     @armor_window = Window_ArmorSelect.new
  74.     rb_main
  75.     @armor_window.dispose
  76.   end
  77.   alias rb_update update
  78.   def update
  79.     if @armor_window.active
  80.       update_armor
  81.       return
  82.     end
  83.     rb_update
  84.   end
  85.   def update_armor
  86.     @armor_window.update
  87.     if Input.trigger?(Input::C)
  88.       armor_id = @armor_window.armor.id
  89.       if $game_system.armor_storage(armor_id) == 0
  90.         $game_system.se_play($data_system.buzzer_se)
  91.         return
  92.       end
  93.       $game_system.se_play($data_system.decision_se)
  94.       @armor_window.active = false
  95.       @armor_window.visible = false
  96.       $game_party.gain_armor(armor_id, 1)
  97.       $game_system.storage_export(armor_id, 1)
  98.       return
  99.     end
  100.     if Input.trigger?(Input::B)
  101.       $game_system.se_play($data_system.cancel_se)
  102.       @armor_window.visible = false
  103.       @armor_window.active = false
  104.       return
  105.     end
  106.   end
  107.   def show_armor_select
  108.     @armor_window.show
  109.   end
  110. end

点评

依然是个空窗口啊~~不知道版主测试下来的界面是怎么样的?为什么我这里总是一个空窗口??  发表于 2014-9-20 14:56
另外没有库存的能否不显示?就当做不存在,不好意思。。  发表于 2014-9-20 10:33
麻烦了!但是我设置变量值以后,调出的那个防具选择窗口还是空白的  发表于 2014-9-20 10:31

评分

参与人数 1梦石 +1 收起 理由
︶ㄣ牛排ぶ + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

◎无名侠客

梦石
0
星屑
50
在线时间
49 小时
注册时间
2007-6-7
帖子
347
3
 楼主| 发表于 2014-9-19 23:39:48 | 只看该作者
我的意思是,已知变量1、2、3的值,假设变量1、2、3的值分别是7、8、9,就在窗口显示数据库编号为789的防具,假设变量1、2、3分别是0、8、0,那么只在窗口显示数据库编号为8的防具,窗口中显示的每件防具如果存在,那么每一种的数量都为2。
(关于窗口显示数量的要求我没有说,对不起)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

◎无名侠客

梦石
0
星屑
50
在线时间
49 小时
注册时间
2007-6-7
帖子
347
4
 楼主| 发表于 2014-9-20 09:57:57 | 只看该作者
本帖最后由 七禽七兽 于 2014-9-20 10:03 编辑
RyanBern 发表于 2014-9-19 15:54
简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:可以调出防具选择对话框,选择完毕后,被选 ...


我先对变量1、变量2、变量3赋值




然后用事件执行脚本$scene.armor_window.show调出窗口




我希望窗口出现的是6号7号10号防具,数量是各一件,但是窗口里啥都没有?

点评

已修改并测试。请注意查收  发表于 2014-9-20 11:00
已经按照要求做了更改,请查看2L,下次问题描述更清楚一些就好了,要不还要返工。初始的库存设定为2件。没有库存的防具会用灰色显示。  发表于 2014-9-20 10:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

◎无名侠客

梦石
0
星屑
50
在线时间
49 小时
注册时间
2007-6-7
帖子
347
5
 楼主| 发表于 2014-9-20 11:18:56 | 只看该作者
RyanBern 发表于 2014-9-19 15:54
简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:可以调出防具选择对话框,选择完毕后,被选 ...

为什么我打开的防具选择窗口始终是这个样子??

点评

64行的def show后面加了一句refresh,这回应该不会错了。  发表于 2014-9-20 11:43
回复 支持 反对

使用道具 举报

Lv1.梦旅人

◎无名侠客

梦石
0
星屑
50
在线时间
49 小时
注册时间
2007-6-7
帖子
347
6
 楼主| 发表于 2014-9-20 12:11:36 | 只看该作者
本帖最后由 七禽七兽 于 2014-9-20 12:15 编辑
RyanBern 发表于 2014-9-19 15:54
简单做了一个,没有进行测试。在地图场景模式下,使用事件脚本:可以调出防具选择对话框,选择完毕后,被选 ...


加了refresh,出错了

点评

2楼的脚本重新复制下,之前的那个有点小错误  发表于 2014-9-20 12:18
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

7
发表于 2014-9-20 20:22:12 | 只看该作者
已附加范例工程,打开看看吧。
Project4.rar (187.44 KB, 下载次数: 38)
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-22 03:34

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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