Главная » 2D графика » Создание карты в игре методом спрайтов

RSS

Создание карты в игре методом спрайтов

Не нравитсяНравится   Рейтинг +6

Простые карты

В играх, где используется простая 2D проекция, используется наверное два способа построения игрового пространства (карт). Первый о котором и будет рассказ, заключается в построение карты из спрайтов одинакового размера. А второй из уже готовых больших изображений, но об этом в другой статье.

Преимущества этого способа – малый объем ресурсов графики, следовательно не требовательность к ресурсам. Практически любой размер карты – он ограничен лишь массивом и т.д. К минусам можно отнести сложность подгона текстур друг к другу.

Этот способ построения карт применялся в таких БОЕВИКАХ ( не побоюсь этого слова ) игрового фронта как : WARCRAFT, DUNE и т.д. С помощью этого типа карт можно написать неплохую RPG или стратегия. Ну приступим. Первое что нам нужно это спрайты:

В примере я сделал файл Flur1.bmp там 20 спрайтов размером 32 x 32 / при создании старайтесь делать спрайты квадратные – упрощается вычисление/. Спрайты индексируются 0 … 19;

Что представляет из себя карта – это двух мерный массив , элементы которого – индексы спрайтов. Например:

1
MAP: Array [0..100,0..100] of integer;

Это означает, что мы хоти создать карту размером 100 x 100 спрайтов, допустим размер спрайта 32 x 32 тогда общая длина/ширина карты в пикселях будет 3200 x 3200. Но что вам мешает создавать карты, 1000 x 1000 клеток. ( Пример в HMM2 максимальная карта 128 x 128 при размере спрайта 32 пикселя )
Я советую создать класс для карты, вот как сделал бы я:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type TFlur= class
private
  SpriteLastIndex, // Кол-во спрайтов в Resource
  SpriteWH:integer;// Размер спрайта, должен быть квадрат
  Resource:TBitmap;// Ресурсы графики
public
  Table:Tlist; // Массив карты развернутый в список
  Width,Heigth:Integer;// Ширина и высота карты в спрайтах
  Constructor Create(Const X,Y,Sprite:integer);// ширина, высота, размер спрайта
  Procedure LoadResource(FileName:String); // путь к BMP ресурсу
  Procedure RandomGenerator; // случайное заполнение Table
  Procedure Draw(DestHandle:TCanvas;X,Y:Integer;SourceRect:TRect);
  // Canvas для вывода,
  // Смещение X и Y относительно начала DestHandle
  // SourceRect - какой кусок карты Table выводить на экран, В КОЛ-ВАХ СПРАЙТОВ
  Destructor Destroy; override;
end;

Страницы : 1 2 3 4 5