Проблеми с относително препращане на файлове на 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.

За да получите текущата директория на вашия действителен ruby ​​файл (спрямо 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