Project1

标题: 請教必須裝備物件的問題。 [打印本页]

作者: 妖精蕾贝卡    时间: 2015-7-9 22:51
标题: 請教必須裝備物件的問題。
我想問問怎麼讓裝備的位置必須擁有一件物件。
簡單的說,就是不允許裝備位置沒有裝備的情況。
請問這個效果該怎麼實現。
作者: kuerlulu    时间: 2015-7-10 09:59
Window_EquipItem 58 行 的"添加空白" 是用来卸下装备的, 注释掉试试。
作者: 妖精蕾贝卡    时间: 2015-7-10 19:55
kuerlulu 发表于 2015-7-10 09:59
Window_EquipItem 58 行 的"添加空白" 是用来卸下装备的, 注释掉试试。

這個方法一注釋就會出錯······
作者: 蝉岭Cicada    时间: 2015-7-10 23:26
本帖最后由 蝉岭Cicada 于 2015-7-10 23:29 编辑

这样子的?
RUBY 代码复制
  1. 5.times{|t| return if @right_window.instance_variable_get(:@data)[t] == nil}

没有装备的话,不能返回
148行

作者: 妖精蕾贝卡    时间: 2015-7-10 23:51
蝉岭Cicada 发表于 2015-7-10 23:26
这样子的?
5.times{|t| return if @right_window.instance_variable_get(:@data)[t] == nil}
[/pre]

測試可行,但感覺效果有些奇怪。
如果可以追加一下提示語的話就更好。
另外追問一下,如果只想指定某個部位必須有裝備
該怎麼修改原句?
作者: 蝉岭Cicada    时间: 2015-7-11 09:10
本帖最后由 蝉岭Cicada 于 2015-7-11 09:39 编辑
妖精蕾贝卡 发表于 2015-7-10 23:51
測試可行,但感覺效果有些奇怪。
如果可以追加一下提示語的話就更好。
另外追問一下,如果只想指定某個部 ...


解释一下吧{:2_287:}
RUBY 代码复制
  1. 5.times{|t| return if @right_window.instance_variable_get(:@data)[t] == nil}
  2. 5.times  #=>五次
  3. {|t|                              }  #=>迭代器
  4. return  #=>该行以下不执行
  5. @right_window  #=>Window_EquipRight的实例
  6. instance_variable_get  #=>取得实例变量(目的是取得 Window_EquipRight 中的 @data)
  7. @right_window.instance_variable_get(:@data)  #=>获得 Window_EquipRight 中的 @data(是个数组)
  8. @right_window.instance_variable_get(:@data)[t]  #=>调用数组(@data)的元素(t 为 0 到 4,迭代器迭代 5 次,依次返回 武器数据(0)、盾数据(1)、头数据(2)、身体数据(3)、装饰品数据(4))
  9. @right_window.instance_variable_get(:@data)[t] == nil  #=>如果 0 到 5 其中一项未装备则返回 true,即没有全部装备
  10. return if @right_window.instance_variable_get(:@data)[t] == nil  #=>如果没有全部装备,则该行以下不执行,即不执行 $scene = Scene_Menu.new(2),即不返回菜单
  11. 5.times{|t| return if @right_window.instance_variable_get(:@data)[t] == nil}  #=>总的来说就是,五个装备,从上到下依次迭代,如果有没装备的就不返回菜单



提示语,这样子如何
在def main里插入这段
RUBY 代码复制
  1. @alert_window = Window_Base.new(0, 0, 640, 64)
  2. @alert_window.contents = Bitmap.new(640 - 32, 64 - 32)
  3. @alert_window.opacity = 0
  4. @alert_window.contents.font.color = Color.new(255,128,128)
  5. @alert_window.contents.draw_text(0, 0, 640-32, 34, "请装备!", 2)
  6. @alert_window.visible = false


在def update_right里插入这段
RUBY 代码复制
  1. if @right_window.instance_variable_get(:@data)[0] == nil
  2.   @alert_window.visible = true
  3.   return
  4. end
  5. @alert_window.visible = false


效果!!



指定的话,以下 5 种情况,自己配合用吧,用 && 或 ||
RUBY 代码复制
  1. return if @right_window.instance_variable_get(:@data)[0] == nil  武器数据
  2. return if @right_window.instance_variable_get(:@data)[1] == nil  盾数据
  3. return if @right_window.instance_variable_get(:@data)[2] == nil  头数据
  4. return if @right_window.instance_variable_get(:@data)[3] == nil  身体数据
  5. return if @right_window.instance_variable_get(:@data)[4] == nil  装饰品数据
  6.  
  7. 组合示范
  8. return if @right_window.instance_variable_get(:@data)[2] == nil && @right_window.instance_variable_get(:@data)[4] == nil  如果 头数据 和 装饰品数据 是空的则不返回


作者: 妖精蕾贝卡    时间: 2015-7-11 15:47
蝉岭Cicada 发表于 2015-7-11 09:10
解释一下吧
5.times{|t| return if @right_window.instance_variable_get(:@data)[t] == nil}
...

十分感謝您的說明和指導。
但還有一些瑕疵,提示文字一直顯示。
有無辦法等多少幀后消除掉?
作者: 蝉岭Cicada    时间: 2015-7-11 16:07
本帖最后由 蝉岭Cicada 于 2015-7-11 16:08 编辑
妖精蕾贝卡 发表于 2015-7-11 15:47
十分感謝您的說明和指導。
但還有一些瑕疵,提示文字一直顯示。
有無辦法等多少幀后消除掉? ...


疏忽了
这样子看看
RUBY 代码复制
  1. @alert_window.visible = false


作者: 妖精蕾贝卡    时间: 2015-7-11 16:08
蝉岭Cicada 发表于 2015-7-11 16:07
疏忽了
这样子看看
@alert_window.visible = false

可以了感謝。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1