无法使用 Learn Game Programming with Ruby 在 Gosu 中打开文件 ruby.png

Cannot open file ruby.png in Gosu using Learn Game Programming with Ruby

我正在使用《通过 Ruby 学习游戏编程》一书,我正在尝试只执行示例代码。

使用示例代码时出现以下错误。

❯ ruby WhackARuby/WhackARuby_1/whack_a_ruby.rb                                                                                                           code
/Users/noahclark/.rvm/gems/ruby-2.2.1/gems/gosu-0.10.4/lib/gosu/patches.rb:40:in `initialize': Cannot open file ruby.png (RuntimeError)
        from /Users/noahclark/.rvm/gems/ruby-2.2.1/gems/gosuu0.10.4/lib/gosu/patches.rb:40:in `initialize'
        from WhackARuby/WhackARuby_1/whack_a_ruby.rb:15:in `new'
        from WhackARuby/WhackARuby_1/whack_a_ruby.rb:15:in `initialize'
        from WhackARuby/WhackARuby_1/whack_a_ruby.rb:70:in `new'
        from WhackARuby/WhackARuby_1/whack_a_ruby.rb:70:in `<main>'

示例代码如下所示:

require 'gosu'

class WhackARuby < Gosu::Window
  def initialize
    super(800, 600)
    self.caption = 'Whack the Ruby!'
    @image = Gosu::Image.new('ruby.png')
  end
end

对这里可能发生的事情有什么想法吗?例如,我尝试将有问题的行更改为 @image = Gosu::Image.new('./ruby.png'),但这没有帮助。

我怀疑是这个原因,但我的 ruby 版本是 ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-darwin14]

EDIT 包括文件路径:

问题总是因为文件不存在于您认为的位置。

引用文件的方法有很多种。 File 文档有 expand_pathrealpathabsolute_path,所有这些都使得基于绝对或相对路径以及相对于当前 运行 文件、应用程序或特定目录。如何使用它们在他们的示例中有所介绍。

重要的是要确保您知道代码将哪个目录视为当前工作目录,and/or 文件所在的目录。第一个在使用相对路径时很重要,第二个是如果你不想关心你当前的路径并且知道文件总是存在于某个地方。

还有,还有文件名和你想的不一样,或者根本不存在的情况。

在我的例子中,解决方案是使用更明确的文件路径:

Gosu::Image.new("#{__dir__}/ruby.png")