Карта сайта 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 для создания мини-карты в стратегической игре. Мини-карта создается путем отображения основной карты в уменьшенном масштабе на временной поверхности и сохранения этой поверхности в TPictureCollectionItem.

Разбивка кода:

  1. Создается компонент TDirectDrawSurface (tm) с тем же размером, что и основная карта, но с меньшим масштабом.
  2. Поверхность очищается до черного цвета.
  3. Проводится цикл по каждому пикселю основной карты и используется метод StretchDraw для отображения соответствующей части основной карты на временной поверхности в уменьшенном масштабе.
  4. Содержимое временной поверхности сохраняется в TPictureCollectionItem (ng).
  5. Временная поверхность освобождается.
  6. Создается еще одна временная поверхность (tm2) с тем же размером, что и мини-карта (150x150 пикселей).
  7. Поверхность очищается до черного цвета.
  8. Используется метод StretchDraw для отображения сохраненного TPictureCollectionItem на второй временной поверхности в оригинальном масштабе.
  9. Содержимое второй временной поверхности сохраняется в том же TPictureCollectionItem (ng).
  10. Вторая временная поверхность освобождается.

Результатирующая мини-карта затем хранится в компоненте TdxImageList с именем 'MMG'.

Для отображения мини-карты во время игры можно просто нарисовать изображение на экране с помощью метода StretchDraw. Кроме того, можно добавить дополнительные детали, такие как позиции юнитов на мини-карте.

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

Создание Миникарты к Стратегиям - это пример программного кода, который позволяет создавать мини-карту для стратегических игр с помощью языка программирования Pascal.


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


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


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:57:13/0.0034749507904053/0