Закодив большой проект по заказу, хотелось-бы, чтоб он выглядел пристижно т.е. минимум файлов о которых нужно было-бы заботиться, чтоб они не потерялись, ну и сами ресурсы чтоб подменить нельзя было...
все эти приемущества нам окажет следующая
либа, которая поможет нам спрятать все ресурсы в один пак-файл или прямо в екзешник проекта.
как пользоваться этим чудом? сказал-бы просто, если бы это было так
, но... прорвемся... итак поехали!
создадим скрипт запаковки ресурсов:
в блиц редакторе создаем новый файл
ОБЯЗАТЕЛЬНО НОВЫЙ, ОТДЕЛЬНЫЙ *.bb ФАЙЛ
пишем прямо в начале CreatePakFile "Filename", Encryption Key, headerMask
где:
Filename - имя нашего пака
Encryption Key - ключ для шифрования данных (32 тиное число)
headerMask - ключ для шифрования заголовков файлов, чтоб при открытии допустим в блокноте не увидеть имен запакованных файлов (32 битное число)
ключи могут быть и нулями, тогда ничего не шифруется
и теперь самое кропотливое: пишем
AddtoPak "имя файла ресурса"
и так для всех ресурсов которые требуются для работы проекта. поскольку все мы делаем в папке нашего проекта, то пути нужно писать от текущей папки и далее допустим AddToPak "media\sound\step.wav"
Теперь закрываем пак командой CloseCreatedPak()
В результате у нас получился большой Пак-файл (он по размеру будет немного больше чем ресурсы на диске)... теперь давайте попробуем вытащить из него запакованные ресурсы.
закрываем наш новый файл и открываем проект, инклюдим в него файл из либы Bones.bb, как это выглядет думаю писать не нужно
далее инициализируем наш Пак:
PakInit "Имя_файла_пака", Encryption Key, "TMP", headerMask
Где:
Encryption Key - код для расшифровки данных
headerMask - код для расшифровки заголовков файлов
эти числа должны быть такими-же как и когда мы создавали пак
"TMP" - путь, куда будут распакованы файлы из пака, "TMP" означает, что файлы будут распакованны во временую папку Windows, тут можно и свой путь указать (при особом желании
)
теперь опять самое кропотливое: ищем в проекте все команды которыми грузятся ресурсы... хоть LoadMesh, хоть LoadImage... и преобразовываем их сл. образом:
var=LoadMesh ("Имя_Ресурса",Имя_Родителя)
преобразуется в:
var=LoadMesh (Pak("Имя_Ресурса"),Имя_Родителя)
для функции Pak() есть еще один двойник DLPak(), отличие в том, что DLPak() перераспаковывает ресурс, даже если он уже есть в распакованном виде...
ВСЁ! компилим проект... запускаем... теперь все ресурсы берутся из пака...
Ну а теперь самое интересное, сливание пака с EXE файлом проекта... для этого:
в файле проекта ищем команду PakInit и в качестве пути к паку пишем имя EXE файла проекта
компилируем проект
если сейчас запустить EXE, то программа вылетит с ошибкой... все правильно...
открываем код, где мы создаем пак, там после команды закрытия пака нужно дописать еще одну команду: AppendToExe "Файл_проекта.exe","Пак_Файл".
запускаем на выполнение... таким образом после создания пак приаттачится к EXE, теперь можно пробовать запускать екзешник, должно все работать...
Примечания:
Не делать приаттачивания пака из выполняющегося екзешника, может косяк получиться