Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Создание Миникарты к Стратегиям

Delphi , Графика и Игры , Создание игр

Создание Миникарты к Стратегиям

Оформил: XVeL
Автор: Spose
WEB-сайт: http://daddy.mirgames.ru

Этот пример взят из нашей игры "В ОСАДЕ", способ хорош - быстрый и качественный.
Немного о переменных и числах:
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 в нужном месте, и если надо то и точки(позиции юнитов на карте) на ней.

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

Статья Создание Миникарты к Стратегиям раздела Графика и Игры Создание игр может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Создание игр ::


реклама

::


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
23.09.2020 23:09:30/0.015104055404663/0