Перейти к основному содержимому

18.3. Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?

В: Мне нужно узнать, есть ли в папке файл (картинка, музыка и т.д.). Как это сделать?

О:

К сожалению, в QSP нет специальной функции, позволяющей проверять наличие файлов в папках. Если файл отсутствует, плеер, в зависимости от типа файла, либо проигнорирует его отсутствие, либо покажет на экране ошибку.

Например, если плеер не найдёт файл музыки, он просто проигнорирует команду play. Если плеер не найдёт файл изображения, на экран будет выведена "битая картинка". Если плеер не найдёт файл модуля, он выведет ошибку 104: "указанный файл недоступен или не найден!".

Определённо можно проверить наличие звукового файла, если сразу после запуска мелодии воспользоваться функцией isplay:

play 'audio/coolmusic.mp3'
if isplay('audio/coolmusic.mp3')=-1:
'Файл существует'
else
'Файл не существует'
end

Поскольку воспроизведение отсутствующих звуковых файлов не вызывает ошибки, а команда попросту игнорируется плеером, мы можем использовать этот способ для определения наличия других файлов. Да, это будет костыль, но если вы боитесь забыть, скинули вы в папку нужный файл или нет, способ вам подойдёт.

Смысл в чём.

Параллельно определённому файлу храним звуковой файл без звука длительностью 1 секунда хотя бы. Этот файл у нас имеет точно то же название, что и файл, наличие которого мы хотим проверить. Сама проверка выглядит следующим образом: запускаем звуковой файл и проверяем его воспроизведение через isplay. Если файл отсутствует, то он просто не будет воспроизводиться и isplay выдаст 0. Из чего мы твёрдо делаем вывод, что и нужного нам файла нет.

usehtml=1
play 'img/picture_000345.MP3'
if isplay('img/picture_000345.MP3')=-1:
'<img src="img/picture_000345.PNG">'
else
'Художник забыл нарисовать картинку.'
end

Пример можно скачать отсюда

Так же вы можете организовать генерацию модуля со списком файлов в указанной папке. Вот метод, предложенный evp:

Некий исполняемый файл (это может быть даже bat-файл):

  • составляет список файлов в указанной папке/папках;
  • сохраняет результаты своей работы в текстовый документ, используя синтаксис txt2gam для формирования нужных переменных или массивов;
  • конвертирует этот файл в .qsp, используя txt2gam.exe;
  • запускает игру.

В самой игре используется функция INCLIB для присоединения получившегося модуля.

Если вы используете QSP.sublime-package, у вас есть возможность прописать в файле проекта специальный параметр "scans", и тогда локация для проверки существования файла будет генерироваться автоматически на основе содержимого указанной папки.