2012-02-15 13 views
1

は、このコードはChingu、Gosuの2Dゲームフレームワークに依存Ruby用のゲームライブラリで非常に奇妙な例外を引き起こしている原因:Chingu入力プロパティは、例外

class StopSignAttack < Chingu::Window 

    def initialize 
    super(1000, 1000, false) 
    self.input = { :escape => :close } 
    self.caption = "Stop Sign ATTACK!!!" 
    push_game_state(Start.new) 
    end 

end 

の値Chingu :: Windowの入力プロパティは、エスケープキーを押すとゲームウィンドウを閉じるだけです。エスケープキーを押すとウィンドウが閉じますが、爆弾がひどく、この例外:

def close 
    super.close 
    end 

/Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/chingu-0.8.1/lib/chingu/helpers/input_dispatcher.rb:63:in `block in dispatch_input_for': undefined method `button_down?' for nil:NilClass (NoMethodError) 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/chingu-0.8.1/lib/chingu/helpers/input_dispatcher.rb:62:in `each' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/chingu-0.8.1/lib/chingu/helpers/input_dispatcher.rb:62:in `dispatch_input_for' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/chingu-0.8.1/lib/chingu/window.rb:148:in `block in intermediate_update' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/chingu-0.8.1/lib/chingu/window.rb:148:in `each' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/chingu-0.8.1/lib/chingu/window.rb:148:in `intermediate_update' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/chingu-0.8.1/lib/chingu/window.rb:133:in `update' 
    from stop_sign_attack.rb:24:in `<main>' 

私はスーパークラスcloseメソッドを呼び出すと、:: Chinguでcloseメソッドを実装するウィンドウを試してみましたESCキーを押したときに

そして、私はこの例外を取得:

stop_sign_attack.rb:23:in `close': undefined method `close' for nil:NilClass (NoMethodError) 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/gosu-0.7.41-universal-darwin/lib/gosu/swig_patches.rb:19:in `rescue in block (2 levels) in <class:Window>' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/gosu-0.7.41-universal-darwin/lib/gosu/swig_patches.rb:12:in `block (2 levels) in <class:Window>' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/gosu-0.7.41-universal-darwin/lib/gosu/swig_patches.rb:26:in `show' 
    from /Users/sams/.rvm/gems/ruby-1.9.3-p0/gems/gosu-0.7.41-universal-darwin/lib/gosu/swig_patches.rb:26:in `show' 
    from stop_sign_attack.rb:28:in `<main>' 

任意のアイデアが高く評価されています。

答えて

2

誰かがこれをデバッグできるようにする情報を残しました。たとえば、Startというゲーム状態をプッシュしていますが、Startクラスはあなたの例では宣言されていません。あなたはコードのその部分を共有していません。私はあなたがそこに持っているかをテストするには、以下のサンプルプロジェクトを作成しました:

require 'chingu' 

# A simple GameState-example 
class Start < Chingu::GameState 
end 

class StopSignAttack < Chingu::Window 

    def initialize 
    super(1000, 1000, false) 
    self.input = { :escape => :close } 
    self.caption = "Stop Sign ATTACK!!!" 
    push_game_state(Start.new) 
    end 

end 

StopSignAttack.new.show 

これは私が脱出を押したときに例外なしに終了する、うまく動作します。

+0

あなたは大きなポイントを作っていますが、私のトラブルシューティングはそれほど深刻ではないと私は認めます。私は入力のために釣っていた。 – codewise

関連する問題