Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Э
тот пример взят из нашей игры "В ОСАДЕ", способ хорош - быстрый и качественный.
Н
емного о переменных и числах: 150 - это размер миникарты в пикселах (у нас 150 на 150) rx и ry - ширина и высота карты (у нас обычно 80 на 80) П
ерейдем непосредственно к описанию:
procedure
CreatemMap;
var
i,j: Integer;
NG: TDIB; //Это картинка в которую мы
будем сохранять миникарту
Item: TPictureCollectionItem;
//Тут будет хранится картинка в TdxImageList'е
tm:Tdirectdrawsurface; //Поверхность
DxDraw
tm2:Tdirectdrawsurface; //Тоже
begin
ng:=tdib.Create; //Создаем компонент
tm:=Tdirectdrawsurface.Create(myform.DXDraw.Surface.DDraw);
//Создаем поверхность
tm.SystemMemory:=false; //Это
надо
tm.SetSize((150 div
rx +1)*rx ,(150 div
ry
+1)*ry); //Устанавливаем размеры пропорциональные
размерам карты
tm.Fill(0); //Заоиваем
поверхность черным цветом
tm2:=Tdirectdrawsurface.Create(myform.DXDraw.Surface.DDraw);
//Создаем вторую поверхность
tm2.SystemMemory:=false; //Надо
tm2.SetSize(150,150); //Устанавливаем
сжатые размеры (Настоящий размер миникарты)
tm2.Fill(0); //Тоже заливаем
черным
for
i:=0 to
rx-1 do
//Далее отрисовываем всю карту for
j:=0 to
ry-1 do
//по частям в уменьшеном виде на первую поверхность myform.il.Items.Find('west0').StretchDraw(tm,bounds((150 div
rx+1)*i,(150 div
ry+1)*j,150 div
rx+1,150 div
ry+1),map[i,j]);
//map - двухмерный массив содержащий номер
картинки
tm.AssignTo(ng); //Сохраняем
содержание поверхности в картинку
tm.Free; //Поверхность теперь
нам не нужна и мы её удаляем
Item := TPictureCollectionItem.Create(MyForm.IL.Items);
//Добавляем картинку в TDxImageList
Item.Name:='MMG';
//Её имя
Item.SystemMemory:=false; //Надо
Item.Picture.Graphic := ng; //Загружаем
картинку в список
item.Transparent:=false; //Непрозрачна
Item.Restore; //Принимаем
изменения
myform.il.Items.Find('mmg').StretchDraw(tm2,bounds(0,0,150,150),0);
//Теперь рисуем(заодно и сжимаем) картинку в заданных
размерах миникарты на вторую поверхность!
end
;
Т
еперь во время игры просто отрисовываем картинку под именем MMG в нужном месте, и если надо то и точки(позиции юнитов на карте) на ней.
В
от в принципе и всё.