Проблемы с относительными ссылками на файлы Ruby/Gosu

Итак, я делаю игру с Ruby/Gosu, и строки для загрузки всех изображений выглядят так:

@image_name = Gosu::Image.new(self, 'C:\Users\Carlos\Desktop\gamefolder\assets\bg.jpg', false)

Я хочу ссылаться на них в зависимости от их местоположения относительно исходного файла. Файл, который включает указанную выше строку, находится в C:\Users\Carlos\Desktop\gamefolder\, поэтому я думаю, что могу просто изменить указанное выше на '\assets\bg.jpg' или 'assets\bg.jpg', но это не работает.

Конкретная ошибка "Could not load image assets/bg.jpg using either GDI+ or FreeImage: Unknown Error (Runtime Error)."


person user2493615    schedule 23.10.2013    source источник


Ответы (1)


Если вы хотите получить текущий каталог (вашего контекста выполнения, не обязательно файл, в котором вы находитесь), просто используйте Dir.pwd. Выведите это на консоль, чтобы убедиться, что ваш текущий каталог на самом деле gamefolder.

Чтобы получить текущий каталог вашего фактического рубинового файла (относительно Dir.pwd), используйте __FILE__, например.

File.dirname(__FILE__)

Передайте это File.expand_path, чтобы получить полный путь. Вы можете сделать небольшую проверку работоспособности, убедившись, что File.exists?("#{File.expand_path File.dirname __FILE__}/assets/bg.jpg") возвращает true.

(Попробуйте File.expand_path('assets/bg.jpg')... возможно, это все, что вам нужно.)

person struthersneil    schedule 23.10.2013
comment
Я пытался использовать File.expand_path(), и это сработало, но теперь игра работает очень медленно и сильно нагревает мой компьютер. Любая идея, почему это было бы? Кроме того, что вы имеете в виду использовать Dir.pwd? Где использовать? - person user2493615; 24.10.2013
comment
Вы бы использовали Dir.pwd для получения текущего каталога, это все, что я имел в виду. Если File.expand_path работает на вас, используйте его. (Я предполагаю, что высокая температура и медлительность являются результатом огромных усилий по обработке изображений! Являются ли изображения достаточно маленькими, и вы уверены, что не читаете их внутри цикла?) - person struthersneil; 24.10.2013
comment
Они считываются только в методе initialize объекта игрового окна. Все, что я сделал, это изменил явную ссылку на файл на File.expand_path('assets/file.jpg'), и игра, казалось, работала примерно вдвое быстрее. - person user2493615; 24.10.2013
comment
Это странно. Попробуйте обсудить это изменение (и только это изменение), так как оно не должно иметь ни малейшего значения. (Если только он не начал правильно читать изображения в первый раз... но я уверен, что вы бы это заметили.) - person struthersneil; 24.10.2013