Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用ruby学习游戏编程在Gosu中打开文件ruby.png_Ruby_Libgosu - Fatal编程技术网

无法使用ruby学习游戏编程在Gosu中打开文件ruby.png

无法使用ruby学习游戏编程在Gosu中打开文件ruby.png,ruby,libgosu,Ruby,Libgosu,我正在使用Ruby的学习游戏编程书,我正在尝试执行示例代码 ❯ ruby WhackARuby/WhackARuby_1/whack_a_ruby.rb code /Users/noahclark/.rvm/gems/ruby-2.2.1/gems/gosu-0.10.4/lib/gos

我正在使用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>'
我使用示例代码得到以下错误

❯ 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>'
❯ ruby-WhackARuby/WhackARuby_1/whack_a_ruby.rb代码
/Users/noahpark/.rvm/gems/ruby-2.2.1/gems/gosu-0.10.4/lib/gosu/patches.rb:40:“初始化”中:无法打开文件ruby.png(运行时错误)
from/Users/noahclark/.rvm/gems/ruby-2.2.1/gems/gosuu0.10.4/lib/gosu/patches.rb:40:in'initialize'
来自WhackARuby/WhackARuby_1/whack_a_ruby.rb:15:in'new'
来自WhackARuby/WhackARuby_1/whack_a_ruby.rb:15:in'initialize'
来自WhackARuby/WhackARuby_1/whack_a_ruby.rb:70:in'new'
来自WhackARuby/WhackARuby\u 1/whack\u a\u ruby.rb:70:in`'
示例代码如下所示:

require 'gosu'

class WhackARuby < Gosu::Window
  def initialize
    super(800, 600)
    self.caption = 'Whack the Ruby!'
    @image = Gosu::Image.new('ruby.png')
  end
end
需要“gosu”
类WhackARuby
你有什么想法吗?例如,我尝试将有问题的行更改为
@image=Gosu::image.new('./ruby.png')
,但没有任何帮助

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

编辑包括文件路径:

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

有许多方法可以引用文件。文档中有
expand_path
realpath
absolute_path
,所有这些都使得基于绝对或相对路径以及相对于当前运行的文件、应用程序或特定目录引用文件变得容易。它们的示例中介绍了如何使用它们

确保您知道代码将其视为当前工作目录的目录和/或文件所在的位置非常重要。当使用相对路径时,第一个很重要,第二个很重要,如果您不想关心当前路径,并且知道文件始终存在于某个位置


此外,还有一种情况是,文件名与您认为的不同,或者根本不存在。

在我的情况下,解决方案是使用更明确的文件路径:

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

我已经包含了
命令的输出,它显示了,我相信代码描述的文件系统。事实上,您是正确的。它使用的是一个相对路径,从那里调用脚本,只有当我从它自己的目录中调用它时,它才真正起作用。非常感谢。