Ruby Госу не удалось найти фоновое изображение - PullRequest
1 голос
/ 17 апреля 2020
 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

Я получаю сообщение об ошибке при инициализации фонового изображения. Он продолжает выдавать ошибку, когда не может найти указанный файл. Изображение находится в папке «media», которая находится в папке для программы.

Вот ошибка

У меня была похожая проблема с 'require 'но исправил это с помощью require_relative. Я не могу найти такое решение для этой проблемы.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Gosu поддерживает относительные пути, но они относительно рабочего каталога, в котором вы вызываете игру из , а не относительно исходного файла. Это может быть тем, что вас здесь смущает!

Например, для следующей структуры каталогов:

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

Если в качестве рабочего каталога у вас была папка game и вы запускали ruby src/main.rb тогда Госу сможет получить доступ к изображению относительно res/image.png.

Это означает, что вам придется каждый раз запускать игру из определенного рабочего каталога, но, очевидно, это не идеально.

Вместо использования этих неуклюжих относительных путей может быть полезно использовать __dir__ вместе с File.expand_path, чтобы получить абсолютный путь к каталогу, в котором выполняется ваш скрипт, и объединить его по этому пути, например:

# Running from src/main.rb

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

Это лучше, чем жесткое программирование абсолютного пути, потому что ваша игра все равно будет работать на чужом компьютере.

1 голос
/ 17 апреля 2020

Вы должны указать абсолютный путь:

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

Приведенный выше пример относится к Ма c.

...