1
 def initialize
 super 200, 135, false
 self.caption = "Gosu Cycle Example"
 @shape_x = 0 
 # Create and load an image to display
 @background_image = Gosu::Image.new("media/earth.png") #this is causing the error

# Create and load a font for drawing text on the screen
 @font = Gosu::Font.new(20)
 @cycle = 0
 puts "0. In initialize\n"
 end

我不断收到背景图像初始化错误。它不断给出一个错误,它找不到指定的文件。该图像位于名为“媒体”的文件夹中,该文件夹位于程序文件夹中。

这是错误

我对“require”有类似的问题,但用“require_relative”修复了它。对于这个问题,我找不到这样的解决方案。

4

2 回答 2

2

Gosu 确实支持相对路径,但它们是相对于您从中调用游戏的工作目录的,而不是相对于源文件的。这可能是让你在这里绊倒的原因!

例如,对于以下目录结构:

game
 |--- src
 |     '--- main.rb
 '--- res
       '--- image.png

如果您将该game文件夹作为您的工作目录并运行ruby src/main.rb,那么 Gosu 将能够以res/image.png.

这意味着您每次都必须从特定的工作目录执行您的游戏,但显然这并不理想。

与其使用这些尴尬的相对路径,不如使用__dir__withFile.expand_path来获取脚本运行所在目录的绝对路径,然后连接到该路径上,如下所示:

# Running from src/main.rb

File.expand_path(File.join(__dir__, "../res/image.png"))
# => "/wherever/game/res/image.png"

这比硬编码绝对路径要好,因为您的游戏仍然可以在其他人的计算机上运行。

于 2020-04-17T15:52:47.537 回答
1

您必须给出绝对路径:

/Users/{name}/.../media/earth.png

上面的示例适用于 Mac。

于 2020-04-17T08:34:29.220 回答