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

RSS

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

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

Пиксельный скроллинг

Прежде чем читать данную статью, настоятельно рекомендую прочесть ее первую часть.

В первой части я показал как можно создать карту из набора спрайтов и вывести ее на любой TCanvas. При этом карта создавалась как таблица из наборов номеров спрайтов, этот способ удобен там, где все объекты привязаны к координатам спрайтов. Чтобы было более понятно, приведу простой пример:

Игра шахматы. Все фигурки привязаны к координатам доски ( у нас к координатам карты), и их передвижение возможно только в этих координатах. Но при переносе фигуры появляются другие координаты – промежуточные. И если ограничиваться координатами доски не возможно создать плавного перемещения, анимации.

Для достижения плавного скроллинга карты, анимации объектов приходится вводить координаты пиксельные.

Изменению подверглись только выделенные красным строчки.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type TFlur2= class
private
  SpriteLastIndex, // Кол-во спрайтов в Resource
  SpriteWH:integer;// Размер спрайта, должен быть квадрат
  Resource:TBitmap;// Ресурсы графики
  Width1,Heigth1:Integer;// Ширина и высота карты в спрайтах
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;

Как Вы видите изменений произошло не очень много, но зато пришлось полностью переписать процедуру вывода готовой карты – Draw. При вызове конструктора, в качестве параметров X и Y передается размер карты в пикселях ( ранее в количествах спрайтов ). Как и в TFlur значения X и Y должны быть равны – только квадратная карта, это связано с особенностью хранения массива со значениями спрайтов. Еще одно условие X должен делиться на Sprite без остатка :)

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