Project1

标题: 有關腳本上沒有方法的問題 [打印本页]

作者: zeldafd    时间: 2013-8-25 19:38
标题: 有關腳本上沒有方法的問題
本帖最后由 zeldafd 于 2013-8-26 11:44 编辑

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

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

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

RUBY 代码复制
  1. class Game_Hud
  2.  
  3.   $game_hud = Game_Hud.new
  4.  
  5.   def initialize
  6.     create_hp
  7.     create_sp
  8.   end
  9.  
  10.   def create_hp
  11.     $hp_slot = Sprite.new
  12.     $hp_slot.bitmap = Cache.system($HP_SLOT)
  13.     $hp_slot.x = 5
  14.     $hp_slot.y = 15
  15.     $hp_slot.z = 85
  16.  
  17.     $hp_meter_image = Cache.system($HP_METER) # hp計的圖
  18.  
  19.     $hp_meter_sprite = Sprite.new
  20.     $hp_meter_sprite.bitmap = Bitmap.new($hp_meter_image.width, $hp_meter_image.height)
  21.  
  22.     # HP血條位置資訊
  23.     $hp_meter_sprite.x = 35
  24.     $hp_meter_sprite.y = 15
  25.     $hp_meter_sprite.z = 90
  26.   end
  27.  
  28.   def create_sp
  29.     $sp_slot = Sprite.new
  30.     $sp_slot.bitmap = Cache.system($SP_SLOT)
  31.     $sp_slot.x = 5
  32.     $sp_slot.y = 45
  33.     $sp_slot.z = 85
  34.  
  35.     $sp_meter_image = Cache.system($SP_METER) # sp計的圖
  36.  
  37.     $sp_meter_sprite = Sprite.new
  38.     $sp_meter_sprite.bitmap = Bitmap.new($sp_meter_image.width, $sp_meter_image.height)
  39.  
  40.     # SP血條位置資訊
  41.     $sp_meter_sprite.x = 35
  42.     $sp_meter_sprite.y = 44
  43.     $sp_meter_sprite.z = 90
  44.   end
  45.  
  46.   def update_hp
  47.     $hp_meter_sprite.bitmap.clear
  48.     $hp_meter_sprite.bitmap.blt(0, 0, $hp_meter_image,
  49.       Rect.new(0, 0, $hp_meter_image.width, $hp_meter_image.height) )
  50.   end
  51.  
  52.   def update_sp
  53.     $sp_meter_sprite.bitmap.clear
  54.     $sp_meter_sprite.bitmap.blt(0, 0, $sp_meter_image,
  55.       Rect.new(0, 0, $sp_meter_image.width, $sp_meter_image.height))
  56.   end
  57.  
  58.   def dispose
  59.     $hp_meter_sprite.bitmap.dispose
  60.     $hp_meter_sprite.dispose
  61.  
  62.     $hp_slot.bitmap.dispose
  63.     $hp_slot.dispose
  64.  
  65.     $sp_meter_sprite.bitmap.dispose
  66.     $sp_meter_sprite.dispose
  67.  
  68.     $sp_slot.bitmap.dispose
  69.     $sp_slot.dispose
  70.   end
  71.  
  72.   def setVisiable(trueorfalse)
  73.     v = trueorfalse
  74.   end
  75.  
  76.   def update
  77.     update_hp
  78.     update_sp
  79.   end
  80.  
  81.   def refresh
  82.     dispose
  83.     initialize
  84.   end
  85.  
  86. end
  87.  
  88. class Spriteset_Map
  89.  
  90.   alias old_init initialize
  91.   def initialize
  92.     $game_hud
  93.     old_init
  94.   end
  95.  
  96.   alias old_dispose dispose
  97.   def dispose
  98.     $game_hud.dispose
  99.     old_dispose
  100.   end
  101.  
  102.   alias old_update update
  103.   def update
  104.     $game_hud.update
  105.     old_update
  106.   end
  107.  
  108.   alias old_refresh_char refresh_characters
  109.   def refresh_characters
  110.     old_refresh_hud
  111.     $game_hud.refresh
  112.   end
  113.  
  114. end

作者: Algalon    时间: 2013-8-26 01:34
且不管别的一切,你第一句$game_hud = Game_Hud.new就错的很离谱了。。调用类只能在本类之外。。你在Game_hud内部调用Game_hud肯定要出错的,而且这跟实例变量和全局变量也没有任何关系。虽然我不清楚你要实现什么,不过最好再仔细看一遍F1再写。
作者: fangyc    时间: 2013-8-26 08:38
然后能不能把这里面的一大堆全局变量改成类变量再说。。。
作者: zeldafd    时间: 2013-8-26 10:51
Algalon 发表于 2013-8-26 01:34
且不管别的一切,你第一句$game_hud = Game_Hud.new就错的很离谱了。。调用类只能在本类之外。。你在Game_h ...

我平時寫這句都是沒有出錯……而且這個只是定義了變量的內容……
你不是來回答可以別吵麼。
作者: zeldafd    时间: 2013-8-26 10:53
fangyc 发表于 2013-8-26 08:38
然后能不能把这里面的一大堆全局变量改成类变量再说。。。

本身是類變量來的,但之前試過有同類事件都是因為類變量的問題,完全不知原因……
所以我把他們都改作了全局變量……
作者: feizhaodan    时间: 2013-8-26 10:57
有可能是在$game_hud创建的时候他还没有初始化
你试试把$game_hud的初始化放到类定义外面。




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