Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Е
сли делать игру с большим количеством графических изображений, то неразумно будет загружать их все сразу, например зачем в основном меню игры графика босса с последнего уровня? А вот памяти его "фото" будет жрать! Чтобы этого непроисходило необходимо разделить всю игру на сцены, и просто при загрузке конкретной сцены удалять из памяти ненужные картинки и загружать туда только те которые в этой сцене используются. Делаем это так: При загрузке сцены пишем:
loadpicdata(DxImagelist1 {Вместо DxImagelist1 имя вашего TdxImageLista},'Menu' {Тут название файла со списком используемых картинок данной сцены});
Формат файла со списком такой: [название]
(название одинаково с именем файла, только без расширения) PictureHeight=800
(Высота картинки) PictureWidth=600
(Ширина картинки) PatternHeight=0
(Высота кадра (если в картинке несколько кадров)) PatternWidth=0
(Ширина кадра) SkipHeight=0
(Пропуск высоты, пусть останеться 0) SkipWidth=0
(Пропуск ширины, пусть останеться 0) SystemMemory=0
(Пока не надо, пусть останеться 0) Transparent=0
(Прозрачен или нет) TransparentColor=clBlack
(Цвет прозрачности)
Например
кусочек файла "game.dat":
[enemy]
PictureHeight=96
PictureWidth=192
PatternHeight=0
PatternWidth=48
SkipHeight=0
SkipWidth=0
SystemMemory=0
Transparent=1
TransparentColor=$00FF8040
При этом файлы должны лежать в папке PicturesBmp (если они Bitmapы) или
PicturesJpg (если они в Jpeg).
Ещё файлы со списком должны лежать в PicturesData
А вот и сама процедура загрузки:
PS. В USES надо дописать DIB, Jpeg, iniFiles
ProcedureTForm1.LoadPicData( var
DXImageList : TDXImageList; FileName : string
); Var
i : integer; Item : TPictureCollectionItem; SectionName : string
; Ident : string
; NewGraphic : TDIB; BitMap : TBitMap; PicFileName : string
; SectionList : TStringList; JpgImg : TJPEGImage; Ext : String
; Function
GetName(InDir,InFileName : string
): string
; Var
OutFileName : string
; begin
Result:=''; OutFileName:=ExtractFilePath(Application.ExeName)+InDir+''+InFileName ; Result:=OutFileName; Exit; OutFileName:='c:'+InDir+''+InFileName; if
FileExists(OutFileName) then begin
Result:=OutFileName; Exit; end
; end
; begin
DXImageList.Items.Clear; //Очищаем память от картинок FileName:=ChangeFileExt(FileName,'.dat'); NewGraphic:=TDIB.Create; BitMap:=TBitMap.Create; SectionList:=TStringList.Create; try
//Читаем файл со списком изображений With
TIniFile.Create(GetName('Picturesdata',FileName)) do try
ReadSections(SectionList); For
i:=0 to
SectionList.Count-1 do begin
SectionName:=SectionList[i]; //Пытаемся определить формат картинки Ext:='bmp'; PicFileName:=GetName('Pictures',Ext+''+SectionName+'.'+Ext); if
FileExists(PicFileName) then
NewGraphic.LoadFromFile(PicFileName); else if not
(FileExists(PicFileName)) then begin
Ext:='jpg'; PicFileName:=GetName('PicturesJpg',SectionName+'.'+Ext); JpgImg:=TJPEGImage.Create; try
JpgImg.LoadFromFile(PicFileName); NewGraphic.Assign(JpgImg); finally
JpgImg.Free; end
; end
; //Добавляем картинку в память Item := TPictureCollectionItem.Create(DXImageList.Items); Item.Picture.Graphic := NewGraphic; Item.Name:=SectionName; Ident:='PatternHeight'; Item.PatternHeight:=ReadInteger(SectionName,Ident,0); Ident:='PatternWidth'; Item.PatternWidth:=ReadInteger(SectionName,Ident,0); Ident:='SkipHeight'; Item.SkipHeight:=ReadInteger(SectionName,Ident,0); Ident:='SkipWidth'; Item.SkipWidth:=ReadInteger(SectionName,Ident,0); Ident:='SystemMemory'; Item.SystemMemory:=ReadBool(SectionName,Ident,false); Ident:='Transparent'; Item.Transparent:=ReadBool(SectionName,Ident,false); Ident:='TransparentColor'; Item.TransparentColor:=StringToColor(ReadString(SectionName,Ident,'clBlack')); Item.Restore; end
; Finally
Free; end
; Finally
NewGraphic.Free; BitMap.Free; SectionList.Free; end
; end
;
В
от и всё!