Project1

标题: 关于$data_items的子方法调用出错,求助 [打印本页]

作者: Phil    时间: 2010-9-3 11:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: goahead    时间: 2010-9-3 11:17
提示: 作者被禁止或删除 内容自动屏蔽
作者: Phil    时间: 2010-9-3 11:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: goahead    时间: 2010-9-3 11:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: Phil    时间: 2010-9-3 11:51
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-9-3 11:54

  1. def draw_item(e)
  2.     stone = @stone[e]
  3.     num = $game_party.item_number(stone.id)
  4.     self.contents.font.color = normal_color
  5.     x = 4
  6.     y = e *32
  7.     rect = Rect.new(x,y,200,32)
  8.     draw_icon(stone.icon_index, x, y+4, true)   
  9.     self.contents.draw_text(x+30,y,192,32, stone.name)
  10.     self.contents.draw_text(x+224,y,16,32,"X",1)
  11.     self.contents.draw_text(x+242,y,24,32,num.to_s,1)
  12.   end
复制代码

作者: Phil    时间: 2010-9-3 12:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-9-3 13:38
本帖最后由 铃仙·优昙华院·因幡 于 2010-9-3 13:42 编辑

回复 Phil 的帖子

我测试过了,正常。
   

这个是你写的脚本的运行截图~~~
作者: Phil    时间: 2010-9-3 14:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-9-3 14:38
本帖最后由 铃仙·优昙华院·因幡 于 2010-9-3 14:47 编辑

回复 Phil 的帖子

我分析下你的错误出现的原因吧。

先看看这句:
  1. @stone = []
  2. for i in 1...$data_items.size
  3.   @stone.push($data_items[i])
  4. end
复制代码
这里知道从1开始计数的说,掠过等于 0 的情况。
-----------------------
  1. if @stone.size > 0
  2.       self.contents = Bitmap.new(200,row_max * 32)
  3.       for i in [email][email protected][/email]
  4.         draw_item(i)
  5.       end
复制代码
这里使用的是缓存数组 @stone 的序号 i 当做 draw_item 方法的参数。
------------------------------
  1. def draw_item(e)
  2.     stone = @stone[e]
  3.     num = $game_party.item_number(stone.id)
  4.     self.contents.font.color = normal_color
  5.     x = 4
  6.     y = e *32
  7.     rect = Rect.new(x,y,200,32)
复制代码
到这里没啥问题。
-----------------------------
  1. self.contents.draw_icon($data_items[e].icon_index, x, y+4, enabled = true)  
复制代码
这里问题就来了, 出错地方有三处。
1. draw_icon 方法是定义在 Window_Base 里的,不是 Bitmap 里。
2. e 是序号,是从0开始的,但是 $data_items 的 0 是 nil 呀,之前知道掠过0 ,这里为什么不去注意下呢?
3. enabled = true 直接填写 true 就好。
   
作者: Phil    时间: 2010-9-3 15:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: Phil    时间: 2010-9-3 15:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: goahead    时间: 2010-9-3 15:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: Phil    时间: 2010-9-3 16:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-9-3 16:19
  1. #==============================================================================
  2. #  武器炼化模块定义
  3. #==============================================================================
  4. module LH
  5.   max_stone = 10
  6.   max_weapen = 30
  7.   weapon_hash = {}
  8. end

  9. #==============================================================================
  10. #  标题窗口
  11. #==============================================================================
  12. class Window_LH_Title < Window_Base
  13.   #--------------------------------------------------------------------------
  14.   # * 物件初始化
  15.   #--------------------------------------------------------------------------
  16.   def initialize
  17.     super(150, 0, 244, 64)
  18.     self.contents = Bitmap.new(width-32,height-32)
  19.     refresh
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # * 更新內容顯示
  23.   #--------------------------------------------------------------------------  
  24.   def refresh
  25.     self.contents.clear
  26.     self.contents.font.color = normal_color
  27.     self.contents.font.size = 30
  28.     self.contents.draw_text(-12,0,self.width,30,"武器炼化",1)
  29.   end
  30.   
  31. end

  32. #==============================================================================
  33. #  矿石选择窗口
  34. #==============================================================================

  35. class Window_LH_Stone < Window_Selectable
  36.   #--------------------------------------------------------------------------
  37.   # * 物件初始化
  38.   #--------------------------------------------------------------------------
  39.   def initialize
  40.     super(0,64,272,208)
  41.     refresh
  42.     self.index = 0
  43.   end
  44.   #--------------------------------------------------------------------------
  45.   # * 更新內容顯示
  46.   #--------------------------------------------------------------------------
  47.   def refresh
  48.     if self.contents != nil
  49.       self.contents.clear
  50.     end
  51.     @stone = []
  52.     for i in 1...$data_items.size
  53.       @stone.push($data_items[i])
  54.     end
  55.    
  56.     if @stone.size > 0
  57.       self.contents = Bitmap.new(200,row_max * 32)
  58.       for i in [email protected]
  59.         draw_item(i)
  60.       end
  61.     else
  62.       self.contents = Bitmap.new(width-32,32)
  63.       self.contents.draw_text(0,0,200,32,"目前没有可以炼化的元素",0)
  64.       self.index = -1
  65.     end
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # * 繪製條目
  69.   #--------------------------------------------------------------------------
  70.   def draw_item(e)
  71.     stone = @stone[e]
  72.     num = $game_party.item_number(stone.id)
  73.     self.contents.font.color = normal_color
  74.     x = 4
  75.     y = e *32
  76.     rect = Rect.new(x,y,200,32)
  77.     e += 1
  78.     draw_icon(stone.icon_index, x, y+4, true)   
  79.     self.contents.draw_text(x+30,y,192,32, stone.name)
  80.     self.contents.draw_text(x+224,y,16,32,"X",1)
  81.     self.contents.draw_text(x+242,y,24,32,num.to_s,1)
  82.   end
  83. end

  84. #==============================================================================
  85. # ** Scene_LH
  86. #------------------------------------------------------------------------------
  87. #  這個類用來显示武器炼化系统。
  88. #==============================================================================

  89. class Scene_LH < Scene_Base
  90.   #--------------------------------------------------------------------------
  91.   # * 初始化
  92.   #--------------------------------------------------------------------------
  93.   def initialize
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # * 程式开始
  97.   #--------------------------------------------------------------------------
  98.   def start
  99.     super
  100.     create_menu_background
  101.     @tw = Window_LH_Title.new
  102.     @sw = Window_LH_Stone.new
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 结束处理
  106.   #--------------------------------------------------------------------------
  107.   def terminate
  108.     super
  109.     dispose_menu_background
  110.     @tw.dispose
  111.     @sw.dispose
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 更新画面
  115.   #--------------------------------------------------------------------------
  116.   def update
  117.     super
  118.     if Input.trigger?(Input::B)
  119.       Sound.play_cancel
  120.       $scene = Scene_Map.new                    # 程式終止
  121.     end
  122.     @tw.update
  123.     @sw.update
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● 更新命令窗口
  127.   #--------------------------------------------------------------------------
  128. end
复制代码
LZ 无视我我之前给的脚本了~~~
作者: wangswz    时间: 2010-9-3 16:30
本帖最后由 wangswz 于 2010-9-3 16:36 编辑

@stone.push($data_items)
为什么弄个新数组 不直接用$data_items?

作者: Phil    时间: 2010-9-3 16:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: Phil    时间: 2010-9-3 16:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-9-3 16:33
应该是   @stone.push($data_items[i])

的吧~~~

作者: Phil    时间: 2010-9-3 16:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: wangswz    时间: 2010-9-3 16:38
为什么我复制回帖之后[i]就变成格式符号了。。
斜体为啥要 i   /i
作者: Phil    时间: 2010-9-3 16:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: 八云紫    时间: 2010-9-3 16:50
$data_items 是数组, 0 是 nil ,剩下的是 RPG::Item 类的实例
作者: Phil    时间: 2010-9-3 16:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: goahead    时间: 2010-9-3 17:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 冰舞蝶恋    时间: 2010-9-3 17:05
天哪,晕啦~哪位高手教一下偶这个脚本盲啊~~看了好多教程反而更晕= =




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