2013-12-16 125 views
0

我正在用JRuby寫一個遊戲引擎,並且當我使用全局變量時出現問題。我只有這些腳本:爲什麼我的全局變量變爲零?

main.rb的:

$CLASSPATH << "src.rb" 

require 'modules' 
require 'SceneMenu' 
require 'SceneMap' 

$game.setScene(SceneMenu.new) 

modules.rb:

$game = Java::MyNamespace::Game::getInstance 

module MyGame 
    def self.cache 
    return $game.cache # << ERROR OCCURS HERE 
    end 
end 

SceneMenu.rb:

class SceneMenu 
    def initialize 
    @count = 0 
    end 
    def update 
    if @count == 100 
     $game.setScene(SceneMap.new) 
    end 
    @count += 1 
    end 
end 

SceneMap.rb:

class SceneMap 
    def initialize 
    @logoTexture = MyGame::cache.load("mylogo.png") 
    end 
end 

我的問題是,當我啓動遊戲,它始終是好的,但是當我@count達到100,並創建SceneMap,時出現錯誤,他說:

undefined method 'cache' for nil:NilClass 

雖然我之前叫$game.setScene(...)

我根本不修改我的$game變量,所以我不知道會發生什麼。

有人知道發生了什麼嗎?

+0

你有哪些類型的錯誤? –

+0

如果你的意思是這個消息,它是:'nil:NilClass'的未定義方法'緩存'。否則,你的錯誤是什麼意思? – dooxe

+1

這會因爲你執行兩次getInstance而上升。你也可以使用'$ game.class'來驗證'$ game'的類。 –

回答

0

我終於通過書面形式固定我的問題:

module MyGame 
    def self.game 
    return Java::MyNamespace::Game::getInstance 
    end 
end 

$game = MyGame::game 
+0

接受答案))) –

+0

明天前我不能這樣做。但我會。 – dooxe

0

也許嘗試的代碼更改爲:

$game = Java::MyNamespace::Game::getInstance 

module MyGame 
    def cache 
     return $game.cache 
    end 
end 
+1

我不確定自己寫的方式($ game.getInstance.cache或$ game.cahce)。我會在一天結束時檢查,謝謝。 – dooxe

+0

所以,我寫的是:'def cache return $ game.cache end'。 – dooxe

相關問題