Как сделать калькулятор в Delphi?

Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.

Как Delphi реализует многоплатформенную разработку?

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); //Теперь рисуем(заодно и сжимаем) картинку в заданных размерах миникарты на вторую поверхность!

   tm2.AssignTo(ng); //Опять сохраняем получившийся результат    tm2.Free; //Избавляемся от уже ненужной второй поверхности    Item.Name:='MMG'; //Исправляем то что нужно в TdxImageList'е    Item.SystemMemory:=false; //Исправляем то что нужно в TdxImageList'е    Item.Picture.Graphic := ng; //Исправляем то что нужно в TdxImageList'е    item.Transparent:=false; //Исправляем то что нужно в TdxImageList'е    Item.Restore; //Принимаем изменения
end

;
 

Т

еперь во время игры просто отрисовываем картинку под именем MMG в нужном месте, и если надо то и точки(позиции юнитов на карте) на ней.


В

от в принципе и всё.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2024 - All Rights Reserved - www.delphirus.com