我正在使用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]
答案 0 :(得分:1)
问题总是因为文件不存在于您认为的位置。
有很多方法可以引用文件。 File文档包含expand_path
,realpath
,absolute_path
,所有这些文档都可以根据绝对或相对路径以及相对于当前运行的文件轻松引用文件文件,应用程序或特定目录。他们的例子中介绍了如何使用它们。
确保您知道代码认为它是当前工作目录的目录,和/或文件所在的位置非常重要。第一个是使用相对路径时很重要,第二个是你不想关心当前路径并且知道文件总是存在于某个地方。
然后,当文件的名称与您认为的名称不同,或者甚至不存在时,也会出现这种情况。
答案 1 :(得分:0)
就我而言,解决方案是使用更明确的文件路径:
Gosu::Image.new("#{__dir__}/ruby.png")