Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Вниз

Звуки в DXWaveList !!!   Найти похожие ветки 

 
Sword-Fish   (2003-04-21 09:32) [0]

Здравствуйте ...
У меня к ВАМ вопрос, такого плана !!!
Я создал упаковщик игровых ресурсов и пакую туда (без архивации) звуки...
Так вот я их пакую, так:

TGameResourceHeader = packed record
Copyright : String[30];
ResCount : Integer;
end;

TGameResourceTable = packed record
Offset : Integer;
end;

Function TMainForm.CompileResource(const SourceFileList : TListBox; const OutFileName: string; const CompileMode : integer) : boolean;
var
// Поток для записи окончательного файла
OutStream : TStream;
// Поток для хранения таблицы смещений
TableStream : TMemoryStream;
// Поток для хранения данных
ResourceStream : TMemoryStream;
// Счетчик и кол-во ресурсов
i,resCount : Integer;
// Смещение от начала файла текущий ресурс
Offset : Integer;
// Размер заголовка и размер всей таблицы смещений
HeaderSize : Integer;
AllTableSize : Integer;
// Экземпляры
GameResourceHeader : TGameResourceHeader;
GameResourceTable : TGameResourceTable;
// Ресурсы разных форматов
MyWave : TWave;
begin
try
OutStream:=TFileStream.Create(OutFileName, fmCreate);
TableStream:=TMemoryStream.Create;
ResourceStream:=TMemoryStream.Create;
HeaderSize:=SizeOf(TGameResourceHeader);
AllTableSize:=SizeOf(TGameResourceTable)*SourceFileList.Count;
Offset:=HeaderSize+AllTableSize;
ResCount:=0;

// Для различных режимов компиляции - различные методы !!!
if CompileMode=2 then begin
MyWave:=TWave.Create;

for I:=0 to SourceFileList.Count-1 do
begin
MyWave.LoadFromFile(SourceFileList.Items[i]);
MyWave.SaveToStream(ResourceStream);
GameResourceTable.Offset:=Offset;
TableStream.WriteBuffer(GameResourceTable, SizeOf(TGameResourceTable));
Offset:=HeaderSize+AllTableSize+ResourceStream.Position;
Inc(resCount);
end;

MyWave.Free;
end;

// Перемещаемся на начало данных
ResourceStream.Seek(0, soFromBeginning);
TableStream.Seek(0, soFromBeginning);
// Записываем авторские права и кол-во ресурсов
GameResourceHeader.Copyright:="Copyright © 2003 Sword-FISH";
GameResourceHeader.ResCount:=ResCount;
// Запись выходного файла
OutStream.WriteBuffer(GameResourceHeader, SizeOf(GameResourceHeader));
OutStream.CopyFrom(TableStream, TableStream.Size);
OutStream.CopyFrom(ResourceStream, ResourceStream.Size);
// Блок финализации
ResourceStream.Free;
TableStream.Free;
OutStream.Free;
Result:=true;
except
Result:=false;
// Блок финализации
ResourceStream.Free;
TableStream.Free;
OutStream.Free;
end;
end;

(( Кстати такой пример был на DelphiGFX !!! )) ...

После этого я не могу их загрузить в DXWaveList !!!
Пишет мне Stream Error ...

Гружу так :
DXWaveList.Items.Add;
DXWaveList.Items[0].Wave.LoadFormStream(LoadSnd(1));
, где LoadSND(n) - функция вызываемая из моей DLL !!!

(перед этим я открываю DLL (само собой :) )
Function LoadSnd(const resCount : integer) : TStream; stdcall;
begin
// Перемещение на начало таблицы смещений ресурса
FileStream.Seek((resCount-1)*SizeOf(GameResourceTable), soFromCurrent);
// Чтение таблицы ресурса
FileStream.ReadBuffer(GameResourceTable, SizeOf(GameResourceTable));
// Перемещение к началу данных затребованного ресурса
FileStream.Seek(GameResourceTable.Offset, soFromBeginning);
// Грузим !!!
MyWave.LoadFromStream(FileStream);
MyWave.SaveToStream(Result);
// Перемещение к началу данных
FileStream.Seek(SizeOf(GameResourceHeader), soFromBeginning);
end;

Как мне быть please !!!!


 
jel   (2003-04-21 10:44) [1]

Использовть временный stream, в который писать нужный ресурс. Методам типа XXX.LoadFromStream глубоко до фени манипуляции по изначальному позиционированию указателя в потоке. Он используют весь поток. Оттуда и ошибка.



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2003.10.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.009 c
1-74218
Сергей Б.
2003-10-09 17:37
2003.10.23
Label1.caption - переменная вместо 1


1-74115
Qwe
2003-10-11 20:01
2003.10.23
Label в несколько строк


1-74267
Ptr
2003-10-11 14:00
2003.10.23
Параметры для TMessage


3-74038
PGrinevich
2003-10-02 11:37
2003.10.23
Трехзвенка на Delphi 3 + MS Access + ODBC + BDE


14-74472
Ренат
2003-10-06 16:03
2003.10.23
Подскажите как ограничить пользователю доступ в интернет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский