查看: 2147|回复: 5

[已经解决] 有關腳本上沒有方法的問題

[复制链接]
梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
回帖
858
发表于 2013-8-25 19:38:40 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 zeldafd 于 2013-8-26 11:44 编辑

我做了個新的HUD系統, 但運行時第47行一直報錯, 說"UNDEFINED METHOD 'bitmap' FOR nil:NilClass"

我以為是我用了實例變量的問題, 但我全部用了全局後都是一樣.

以下是我的HUD的腳本, 請各路人士幫忙看一下是什麼一回事...

[pre lang="ruby" line="1"]class Game_Hud
  
  $game_hud = Game_Hud.new
  
  def initialize
    create_hp
    create_sp
  end
  
  def create_hp
    $hp_slot = Sprite.new
    $hp_slot.bitmap = Cache.system($HP_SLOT)
    $hp_slot.x = 5
    $hp_slot.y = 15
    $hp_slot.z = 85
   
    $hp_meter_image = Cache.system($HP_METER) # hp計的圖
   
    $hp_meter_sprite = Sprite.new
    $hp_meter_sprite.bitmap = Bitmap.new($hp_meter_image.width, $hp_meter_image.height)
   
    # HP血條位置資訊
    $hp_meter_sprite.x = 35
    $hp_meter_sprite.y = 15
    $hp_meter_sprite.z = 90
  end
  
  def create_sp
    $sp_slot = Sprite.new
    $sp_slot.bitmap = Cache.system($SP_SLOT)
    $sp_slot.x = 5
    $sp_slot.y = 45
    $sp_slot.z = 85
   
    $sp_meter_image = Cache.system($SP_METER) # sp計的圖
   
    $sp_meter_sprite = Sprite.new
    $sp_meter_sprite.bitmap = Bitmap.new($sp_meter_image.width, $sp_meter_image.height)
   
    # SP血條位置資訊
    $sp_meter_sprite.x = 35
    $sp_meter_sprite.y = 44
    $sp_meter_sprite.z = 90
  end
  
  def update_hp
    $hp_meter_sprite.bitmap.clear
    $hp_meter_sprite.bitmap.blt(0, 0, $hp_meter_image,
      Rect.new(0, 0, $hp_meter_image.width, $hp_meter_image.height) )
  end
  
  def update_sp
    $sp_meter_sprite.bitmap.clear
    $sp_meter_sprite.bitmap.blt(0, 0, $sp_meter_image,
      Rect.new(0, 0, $sp_meter_image.width, $sp_meter_image.height))
  end
  
  def dispose
    $hp_meter_sprite.bitmap.dispose
    $hp_meter_sprite.dispose
   
    $hp_slot.bitmap.dispose
    $hp_slot.dispose
   
    $sp_meter_sprite.bitmap.dispose
    $sp_meter_sprite.dispose
   
    $sp_slot.bitmap.dispose
    $sp_slot.dispose
  end
  
  def setVisiable(trueorfalse)
    v = trueorfalse
  end
  
  def update
    update_hp
    update_sp
  end
  
  def refresh
    dispose
    initialize
  end
  
end

class Spriteset_Map
  
  alias old_init initialize
  def initialize
    $game_hud
    old_init
  end
  
  alias old_dispose dispose
  def dispose
    $game_hud.dispose
    old_dispose
  end
  
  alias old_update update
  def update
    $game_hud.update
    old_update
  end
  
  alias old_refresh_char refresh_characters
  def refresh_characters
    old_refresh_hud
    $game_hud.refresh
  end
  
end[/pre]
梦石
0
星屑
50
在线时间
141 小时
注册时间
2013-8-6
回帖
114
发表于 2013-8-26 01:34:33 | 显示全部楼层
且不管别的一切,你第一句$game_hud = Game_Hud.new就错的很离谱了。。调用类只能在本类之外。。你在Game_hud内部调用Game_hud肯定要出错的,而且这跟实例变量和全局变量也没有任何关系。虽然我不清楚你要实现什么,不过最好再仔细看一遍F1再写。
回复

使用道具 举报

梦石
0
星屑
50
在线时间
79 小时
注册时间
2007-6-23
回帖
147
发表于 2013-8-26 08:38:36 来自手机 | 显示全部楼层
然后能不能把这里面的一大堆全局变量改成类变量再说。。。
回复

使用道具 举报

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
回帖
858
 楼主| 发表于 2013-8-26 10:51:09 来自手机 | 显示全部楼层
Algalon 发表于 2013-8-26 01:34
且不管别的一切,你第一句$game_hud = Game_Hud.new就错的很离谱了。。调用类只能在本类之外。。你在Game_h ...

我平時寫這句都是沒有出錯……而且這個只是定義了變量的內容……
你不是來回答可以別吵麼。
回复

使用道具 举报

梦石
0
星屑
52
在线时间
704 小时
注册时间
2011-12-27
回帖
858
 楼主| 发表于 2013-8-26 10:53:14 来自手机 | 显示全部楼层
fangyc 发表于 2013-8-26 08:38
然后能不能把这里面的一大堆全局变量改成类变量再说。。。

本身是類變量來的,但之前試過有同類事件都是因為類變量的問題,完全不知原因……
所以我把他們都改作了全局變量……
回复

使用道具 举报

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
回帖
2982

贵宾

发表于 2013-8-26 10:57:50 | 显示全部楼层
有可能是在$game_hud创建的时候他还没有初始化
你试试把$game_hud的初始化放到类定义外面。

评分

参与人数 2星屑 +112 收起 理由
Sion + 100 认可答案
zeldafd + 12 <font><font>認可答案</font&gt

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部