Главная страница
    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.45 MB
Время: 0.011 c
3-74006
jazz
2003-10-04 10:54
2003.10.23
Oracle


9-73962
Dudao++
2003-02-28 03:15
2003.10.23
Delphi и Dark Basic


1-74162
Oleg_Al
2003-10-10 10:11
2003.10.23
доступ к дочерним окнам MDI


14-74411
AkaSaint
2003-10-05 23:47
2003.10.23
Нам нужны еще программисты на Delphi&Builder!


3-74007
Ahmad K
2003-10-05 16:04
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский