Модуль ABCSprites

Модуль ABCSprites

Модуль ABCSprites реализует спрайты - анимационные объекты с автоматически меняющимися кадрами. Спрайт представляется классом SpriteABC и является разновидностью мультикартинки MultiPictureABC, однако, обладает двумя дополнительными возможностями:

1. Спрайты автоматически анимируются в цикле, что управляется специальным таймером. Можно регулировать скорость анимации каждого спрайта, а также останавливать/запускать все спрайты.

2. Спрайты могут иметь состояния, задаваемые строками. Каждое состояние имеет свой независимый набор кадров, меняющихся циклически. Например, игровой объект в состоянии Идти имеет три кадра, а в состоянии Сидеть - один кадр (в этом состоянии анимация отсутствует). Переключая состояния, можно моделировать различное поведение игрового объекта.

Кроме того, анимацию всех спрайтов можно выключить/включить вызовом следующих процедур:

procedure StartSprites;

Стартует анимацию всех спрайтов

procedure StopSprites;

Останавливает анимацию всех спрайтов

Класс SpriteABC

Класс SpriteABC является потомком класса MultiPictureABC и представляет графический объект Спрайт, автоматически анимирующий на экране последовательность рисунков. Спрайты также могут иметь несколько состояний, каждое из которых представляет собой анимацию рисунков.

Конструкторы класса SpriteABC

constructor Create(x,y: integer; fname: string);

Создает спрайт, загружая его из файла с именем fname. Имя fname может быть либо именем графического файла, либо именем информационного файла спрайта с расширением .spinf. Если имя является именем графического файла, то создается спрайт с одним кадром. Остальные кадры добавляются методом Add. После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates. Если файл имеет расширение .spinf, то он содержит информацию о кадрах и состояниях спрайта и должен сопровождаться соответствующим графическим файлом. После создания спрайт отображается на экране в позиции (x,y)

constructor Create(x,y,w: integer; fname: string);

Создает спрайт, загружая его из файла fname. Файл должен хранить рисунок, представляющий собой последовательность кадров одного размера, расположенных по горизонтали. Каждый кадр считается имеющим ширину w. Если ширина рисунка в файле fname не кратна w, то возникает исключение. После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates После создания спрайт отображается на экране в позиции (x,y)

constructor Create(x,y,w: integer; p: Picture);

Создает спрайт, загружая его из объекта p: Picture. Он должен хранить рисунок, представляющий собой последовательность кадров одного размера, расположенных по горизонтали. Каждый кадр считается имеющим ширину w. Если ширина рисунка не кратна w, то возникает исключение. После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates. После создания спрайт отображается на экране в позиции (x,y)

constructor Create(g: SpriteABC);

Создает спрайт - копию спрайта g

Свойства класса SpriteABC

property StateName: string;

Имя состояния

property State: integer;

Номер состояния (от 1 до StateCount)

property StateCount: integer;

Количество состояний. Свойство доступно только на чтение

property Speed: integer;

Скорость спрайта (1..10)

property Active: boolean;

Активность спрайта: True, если спрайт активен (т.е. происходит его анимация), и False в противном случае

property Frame: integer;

Текущий кадр в текущем состоянии

Методы класса SpriteABC

procedure AddState(name: string; count: integer);

Добавляет состояние к спрайту. После добавления всех состояний следует вызвать CheckStates

procedure CheckStates;

Проверяет корректность набора состояний. Вызывается после добавления всех состояний

procedure SaveWithInfo(fname: string);

Сохраняет графический и информационный файлы спрайта. Имя fname задает имя графического файла. Информационный файл сохраняется в тот же каталог, что и графический, имеет то же имя и расширение .spinf

procedure NextFrame;

Переходит к следующему кадру в текущем состоянии

procedure NextTick;

Переходит к следующему тику таймера; если он равен ticks, то он сбрасывается в 1 и вызывается NextFrame

function FrameCount: integer;

Возвращает количество кадров в текущем состоянии

function FrameBeg: integer;

Возвращает начальный кадр в текущем состоянии

function Clone: SpriteABC;

Возвращает клон объекта

Свойства, унаследованные от класса MultiPictureABC

property CurrentPicture: integer;

Номер текущего рисунка

property Count: integer;

Количество рисунков в наборе

Методы, унаследованные от класса MultiPictureABC

procedure Add(fname: string);

Добавляет рисунок к спрайту, загружая его из файла fname. Рисунок должен иметь те же размеры, что и все рисунки из набора

procedure ChangePicture(fname: string);

Меняет набор рисунков на набор, состоящий из одного рисунка, загружая его из файла с именем fname

procedure ChangePicture(w: integer; fname: string);

Меняет набор рисунков на набор, загружая его из файла с именем fname. Файл должен хранить последовательность изображений одного размера, расположенных по горизонтали. Каждое изображение считается имеющим ширину w

procedure NextPicture;

Циклически переходит к следующему рисунку из набора

procedure PrevPicture;

Циклически переходит к предыдующему рисунку из набора

function Clone: MultiPictureABC;

Возвращает клон набора рисунков

Свойства, унаследованные от класса ObjectABC

property Left: integer;

Отступ графического объекта от левого края

property Top: integer;

Отступ графического объекта от верхнего края

property Width: integer;

Ширина графического объекта

property Height: integer;

Высота графического объекта

property dx: integer;

x-координата вектора перемещения объекта при вызове метода Move. По умолчанию установлено в 0. Для неподвижных объектов может быть использовано для хранения любой дополнительной информации, связанной с объектом

property dy: integer;

y-координата вектора перемещения объекта при вызове метода Move. По умолчанию установлено в 0. Для неподвижных объектов может быть использовано для хранения любой дополнительной информации, связанной с объектом

property Center: Point;

Центр графического объекта

property Position: Point;

Левый верхний угол графического объекта

property Visible: boolean;

Видим ли графический объект

property Color: GColor;

Цвет графического объекта

property FontColor: GColor;

Цвет шрифта графического объекта

property Text: string;

Текст внутри графического объекта

property TextVisible: boolean;

Видимость текста внутри графического объекта

property TextScale: real;

Масштаб текста относительно размеров графического объекта, 0<=TextScale<=1. При TextScale=1 текст занимает всю ширину или высоту объекта. По умолчанию TextScale=0.8

property FontName: string;

Имя шрифта для вывода свойства Text

property FontStyle: FontStyleType;

Стиль шрифта для вывода свойства Text

property Number: integer;

Целое число, выводимое в центре графического объекта. Для вывода используется свойство Text

property RealNumber: real;

Вещественное число, выводимое в центре графического объекта. Для вывода используется свойство Text. Вещественное число выводится с одним знаком после десятичной точки

property Owner: ContainerABC;

Владелец графического объекта, ответственный также за перерисовку графического объекта внутри себя (по умолчанию nil)

Методы, унаследованные от класса ObjectABC

procedure MoveTo(x,y: integer);

Перемещает левый верхний угол графического объекта к точке (x, y)

procedure MoveOn(a,b: integer);

Перемещает графический объект на вектор (a, b)

procedure Move; override;

Перемещает графический объект на вектор, задаваемый свойствами dx, dy

procedure Scale(f: real); override;

Масштабирует графический объект в f раз (f>1 - увеличение, 0<f<1 - уменьшение)

procedure ToFront;

Переносит графический объект на передний план

procedure ToBack;

Переносит графический объект на задний план

function Bounds: System.Drawing.Rectangle;

Возвращает прямоугольник, определяющий границы графического объекта

function PtInside(x,y: integer): boolean; override;

Возвращает True, если точка (x, y) находится внутри графического объекта, и False в противном случае

function Intersect(g: ObjectABC): boolean;

Возвращает True, если изображение данного графического объекта пересекается с изображением графического объекта g, и False в противном случае. Белый цвет считается прозрачным и не принадлежащим объекту

function IntersectRect(r: System.Drawing.Rectangle): boolean;

Возвращает True, если прямоугольник графического объекта пересекается прямоугольником r, и False в противном случае

function Clone0: ObjectABC; override;

Возвращает клон графического объекта

procedure Draw(x,y: integer; g: Graphics); override;

Защищенная. Не вызывается явно. Переопределяется для каждого графического класса. Рисует объект на объекте g: Graphics

destructor Destroy;

Уничтожает графический объект

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Модуль INPUT

Из книги Давайте создадим компилятор! автора Креншоу Джек

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


Модуль OUTPUT

Из книги Linux для пользователя автора Костромин Виктор Алексеевич


Модуль ERROR

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл


Модуль SCANNER

Из книги Как спроектировать современный сайт автора Вин Чои


9.3.7. Модуль XKB

Из книги Операционная система UNIX автора Робачевский Андрей М.


14.9.6. Модуль Etc

Из книги Разработка ядра Linux автора Лав Роберт

14.9.6. Модуль Etc Модуль Etc получает различную информацию из файлов /etc/passwd и /etc/group. Понятно, что полезен он только на платформе UNIX.Метод getlogin возвращает имя пользователя, от имени которого запущена программа. Если он завершается неудачно, может помочь метод getpwuid (принимающий в


19.7.1. Модуль mod_ruby

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

19.7.1. Модуль mod_ruby Обычно, если CGI-сценарий пишется на интерпретируемом языке, то при каждом запросе загружается новый экземпляр интерпретатора. Это дорого обходится с точки зрения потребления ресурсов сервера и времени выполнения.Сервер Apache решает эту проблему путем


Модуль

Из книги автора

Модуль Модули – это группы элементов, объединенные для создания отдельных блоков по принципу единства формы или функции. Форма регистрации, например, представляет собой модуль, объединяющий множество элементов, – метки поля формы, кнопки и


Модуль UDP

Из книги автора

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


Модуль TCP

Из книги автора

Модуль TCP Как следует из предшествующего описания TCP, этот транспортный протокол обеспечивает гораздо более высокое качество передачи, чем UDP. Соответственно, его реализация также является гораздо более сложной. В предыдущих разделах уже встречались различные алгоритмы,


Модуль "Hello, World!"

Из книги автора

Модуль "Hello, World!" В отличие от разработки основных подсистем ядра, большинство из которых были уже рассмотрено, разработка модулей подобна созданию новой прикладной программы, по крайней мере в том, что модули имеют точку входа, точку выхода и находятся каждый в своем


Модуль GraphABC

Из книги автора

Модуль GraphABC Модуль GraphABC представляет собой простую графическую библиотеку и предназначен для создания несобытийных графических и анимационных программ в процедурном и частично в объектном стиле. Рисование осуществляется в специальном графическом окне, возможность


Модуль ABCObjects

Из книги автора

Модуль ABCObjects Модуль ABCObjects: обзор Модуль ABCObjects реализует векторные графические объекты с возможностью масштабирования, наложения друг на друга, создания составных графических объектов и многократного их вложения друг в друга. Каждый векторный графический объект


Модуль Timers

Из книги автора

Модуль Timers Модуль Timers содержит класс Timer, позволяющий выполнять определенные действия через равные промежутки времени. В конструкторе класса Timer указывается промежуток времени и имя процедуры без параметров - обработчика события таймера, вызываемой через указанный