查看: 3584|回复: 15

[已经解决] 选择奖励窗口的制作问题

[复制链接]
梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
发表于 2015-8-18 12:29:29 | 显示全部楼层 |阅读模式

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

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

×
还是昨天的问题。是想做到“能在选择时看到奖励物品的属性”并且“选择后获得物品”;
昨天纠结了一天今天发现好像跟shop的window有点类似就拿shopbuy来改,结果改得是一头雾水
我的Scene部分是这么写的
[pre lang="ruby"]class Scene_Chooseaward < Scene_MenuBase
  
  def start
    creat_choose_window
    super
  end
  
  def creat_choose_window
    @choose_window=Window_Chooseaward.new(0,0,200,100)
    @choose_window.set_handler(:ok,method(:gain_ok))
    @choose_window.set_handler(:cancel,method(:return_scene))
  end
  
  def gain_ok
    $game_party.gain_item(item,1)
    return_scene
  end
  
end[/pre]

然后Window_Chooseaward就是选择性抄改Window_ShopBuy
[pre lang="ruby"]class Window_Chooseaward < Window_Selectable
  
  def initialize(x, y, width, height)
    super
    refresh
  end
  
  def refresh
    make_item_list
    create_contents
    draw_all_items
  end

  def item_max
    @data ? @data.size : 1
  end

  def item
    @data[index]
  end  
  
  def make_item_list
    @data = []
    item = $data_weapons[1] #其实我希望这里的道具种类和ID能通过参数指定,但不知道怎么写
    @data.push(item)
  end
   
  def draw_item(index)
    item = @data[index]
    rect = item_rect(index)
    draw_item_name(item, rect.x, rect.y)
    rect.width -= 4
  end
end[/pre]

进去终于显示出物品了,但是背景是全黑的,而且无论是选择物品还是Esc窗口都没有反应,return_scene完全不起作用...

这中间还发生了许多我无法理解的乱七八糟的bug,说来全是泪,已经快崩溃了。

所以谁能解释一下这是为什么,再告诉我到底要怎样做这个窗口?

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2015-8-18 12:42:09 | 显示全部楼层
@choose_window.activate

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
taroxd + 100 + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
 楼主| 发表于 2015-8-18 13:08:02 | 显示全部楼层
喵呜喵5 发表于 2015-8-18 12:42
@choose_window.activate

感谢,终于可以正常进入退出了
但现在问题又来了,在scene部分里加了create_help_window,光标移到物品上还是没办法看到信息栏,是怎么回事?我对创建窗口的正常流程没有一个系统的认识,看的几篇教程贴好像都没说系统思路,所以我总是不知道缺了哪一步......
另外,怎么做到把在事件脚本里写的物品种类和ID参数传递到窗口中?
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2015-8-18 22:23:14 | 显示全部楼层
acv255 发表于 2015-8-18 13:08
感谢,终于可以正常进入退出了
但现在问题又来了,在scene部分里加了create_help_window,光标移到物品上 ...

你自己都说了你是选择性抄改 Window_ShopBuy ,你把人家更新帮助窗口内容的代码选择性无视掉了自然啥都看不到了

事件脚本里写的物品种类和ID参数传递到窗口中,比较简单的方法,直接事件脚本赋值给一个变量 $game_variables[123] ,然后再窗口中读取 $game_variables[123] 即可
回复

使用道具 举报

梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
 楼主| 发表于 2015-8-18 23:30:08 | 显示全部楼层
喵呜喵5 发表于 2015-8-18 22:23
你自己都说了你是选择性抄改 Window_ShopBuy ,你把人家更新帮助窗口内容的代码选择性无视掉了自然啥都看 ...

传递那个我弄好了,
但是我把window的更新帮助的部分也复制进去了,还是找不着啊...愁
  1. class Scene_Chooseaward < Scene_MenuBase
  2.   
  3.   def start
  4.     super
  5.     create_choose_window
  6.     create_help_window
  7.   end
  8.   
  9.   def create_choose_window
  10.     @choose_window=Window_Chooseaward.new(0,0,200,100)
  11.     @choose_window.activate
  12.     @choose_window.viewport = @viewport
  13.     @choose_window.set_handler(:ok,method(:gain_ok))
  14.     @choose_window.set_handler(:cancel,method(:return_scene))
  15.     @choose_window.help_window = @help_window
  16.   end
  17.   
  18.   def gain_ok
  19.     @item = @choose_window.item
  20.     $game_party.gain_item(@item,1)
  21.     return_scene
  22.   end
  23.   
  24. end

  25. class Window_Chooseaward < Window_Selectable
  26.   attr_reader   :status_window
  27.   def initialize(x, y, width, height)
  28.     super
  29.     refresh
  30.   end
  31.   
  32.   def refresh
  33.     make_item_list
  34.     create_contents
  35.     draw_all_items
  36.   end

  37.   def item_max
  38.     @data ? @data.size : 1
  39.   end

  40.   def item
  41.     @data[index]
  42.   end  
  43.   
  44.   def make_item_list
  45.     @data = []
  46.     $wupincanshu.each do |goods|
  47.       case goods[0]
  48.       when 0;  item = $data_items[goods[1]]
  49.       when 1;  item = $data_weapons[goods[1]]
  50.       when 2;  item = $data_armors[goods[1]]
  51.       end
  52.       if item
  53.         @data.push(item)
  54.       end
  55.     end
  56.   end
  57.    
  58.   def draw_item(index)
  59.     item = @data[index]
  60.     rect = item_rect(index)
  61.     draw_item_name(item, rect.x, rect.y)
  62.     rect.width -= 4
  63.   end
  64.   
  65.   #--------------------------------------------------------------------------
  66.   # ● 设置状态窗口    #连这个应该没什么关系的设置我都一起复制进来了
  67.   #--------------------------------------------------------------------------
  68.   def status_window=(status_window)
  69.     @status_window = status_window
  70.     call_update_help
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ● 更新帮助内容
  74.   #--------------------------------------------------------------------------
  75.   def update_help
  76.     @help_window.set_item(item) if @help_window
  77.     @status_window.item = item if @status_window
  78.   end
  79. end
复制代码
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2015-8-18 23:45:35 | 显示全部楼层
acv255 发表于 2015-8-18 23:30
传递那个我弄好了,
但是我把window的更新帮助的部分也复制进去了,还是找不着啊...愁 ...

既然你说你是模仿 Scene_Shop 的,那我直接拿 Scene_Shop 的代码举例吧:
def create_buy_window 方法下有这么一句:
  1. @buy_window.help_window = @help_window
复制代码
请自己再研究一下默认脚本,看看这一句代码的意义
回复

使用道具 举报

梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
 楼主| 发表于 2015-8-18 23:51:32 | 显示全部楼层
喵呜喵5 发表于 2015-8-18 23:45
既然你说你是模仿 Scene_Shop 的,那我直接拿 Scene_Shop 的代码举例吧:
def create_buy_window 方法下 ...

虽然不是很明白这句的具体意思但我也是注意到并且模仿着加了的,在我贴的第15行...
感觉用法应该跟它一样了吧,还是没用啊

点评

请搞明白这句代码的具体意思  发表于 2015-8-18 23:55
回复

使用道具 举报

梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
 楼主| 发表于 2015-8-19 00:20:07 | 显示全部楼层
喵呜喵5 发表于 2015-8-18 23:45
既然你说你是模仿 Scene_Shop 的,那我直接拿 Scene_Shop 的代码举例吧:
def create_buy_window 方法下 ...


看了半天只能通过
  1.   def help_window=(help_window)
  2.     @help_window = help_window
  3.     call_update_help
  4.   end
复制代码
勉强把xx_window.help_window = @help_window理解成“把与xx_window平行的帮助窗口实例赋值给xx_window自己的‘子’帮助栏”,大概就是把xx_window的帮助信息显示在这个平行等级的帮助栏中?

实在太绕了,真没法理解下去了......就我目前的理解好像还是无法对让窗口现形产生帮助......
回复

使用道具 举报

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2015-8-19 00:24:58 | 显示全部楼层
acv255 发表于 2015-8-19 00:20
看了半天只能通过勉强把xx_window.help_window = @help_window理解成“把与xx_window平行的帮助窗口实例 ...

现在,你再回头看看你赋值给xx_window的@help_window是一个帮助窗口的实例吗?

如果不能确定的话,用 p @help_window 来协助你进行判断
回复

使用道具 举报

梦石
3
星屑
75
在线时间
200 小时
注册时间
2008-7-8
回帖
145
 楼主| 发表于 2015-8-19 00:45:05 | 显示全部楼层
喵呜喵5 发表于 2015-8-19 00:24
现在,你再回头看看你赋值给xx_window的@help_window是一个帮助窗口的实例吗?

如果不能确定的话,用 p  ...

我把p "#{@help_window}"和p "#{@help_window}+hehe"分别放在scene_equip和我自己的scene下的生成窗口方法末尾

第一行是调用失败时显示的
第二行是在装备界面下成功调用时显示的

怎么感觉没什么区别....
QQ截图20150819004005.jpg
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部