为什么我的全局变量变为零?

时间:2013-12-16 12:43:24

标签: ruby global-variables jruby

我正在使用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变量,所以我不知道会发生什么。

有人知道发生了什么事吗?

2 个答案:

答案 0 :(得分:0)

也许尝试将代码更改为:

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

module MyGame
    def cache 
        return $game.cache   
    end
end

答案 1 :(得分:0)

我终于通过写:

解决了我的问题
module MyGame
  def self.game
    return Java::MyNamespace::Game::getInstance
  end
end

$game = MyGame::game