Свойство ввода Chingu в Chingu :: GameWindow вызывает исключение - PullRequest
1 голос
/ 15 февраля 2012

Этот код вызывает очень странное исключение в Chingu, игровой библиотеке для ruby, которая зависит от игровой среды Gosu 2D:

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

Значение свойства input для Chingu :: Window должнопросто заставьте окно игры закрыться при нажатии клавиши выхода.Окно закрывается при нажатии клавиши escape, но плохо бомбит за исключением этого:

/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 :: Window, вызывая метод 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>'

Любые идеи приветствуются.

1 Ответ

2 голосов
/ 15 февраля 2012

Вы пропустили некоторую информацию, которая позволила бы кому-то отлаживать это.Например, вы выдвигаете игровое состояние с именем 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

Это прекрасно работает, выходя без каких-либо исключений, когда я нажимаю escape.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...