Показать сообщение отдельно
Старый 04.09.2005, 05:35   #1
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Смех

Закодив большой проект по заказу, хотелось-бы, чтоб он выглядел пристижно т.е. минимум файлов о которых нужно было-бы заботиться, чтоб они не потерялись, ну и сами ресурсы чтоб подменить нельзя было...

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

как пользоваться этим чудом? сказал-бы просто, если бы это было так , но... прорвемся... итак поехали!

создадим скрипт запаковки ресурсов:

в блиц редакторе создаем новый файл ОБЯЗАТЕЛЬНО НОВЫЙ, ОТДЕЛЬНЫЙ *.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, теперь можно пробовать запускать екзешник, должно все работать...


Примечания:

Не делать приаттачивания пака из выполняющегося екзешника, может косяк получиться
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо SubZer0 за это полезное сообщение:
FlameSword (06.08.2018), LUK (17.02.2009), Samarik (12.10.2008)