2012-02-15 59 views
1

此代碼導致Chingu,遊戲庫紅寶石是取決於古藪2D遊戲框架,一個很奇怪的例外: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的輸入屬性應該只是在按下退出鍵時導致遊戲窗口關閉。按下Esc鍵時,窗口關閉,但嚴重與此異常炸彈:

/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>' 

我試圖實現在Chingu close方法::窗口,調用父類的方法接近:

def close 
    super.close 
    end 

而且我得到按下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 

這一切正常,沒有任何異常退出時,我按Esc鍵。

+0

你在那裏做了一個很棒的點,但我承認我的故障排除還沒有那麼深入。我正在尋求意見。 – codewise 2012-03-28 16:47:46