83 lines
3.3 KiB
HTML
83 lines
3.3 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||
<param name="Keyword" value="">
|
||
</object>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||
<title></title>
|
||
<link rel="StyleSheet" href="../../default.css">
|
||
</head>
|
||
|
||
<body>
|
||
<H1>Мультирисунки</H1>
|
||
<p>Мультирисунок представляет собой объект класса <code>MultiPictureABC</code>
|
||
и содержит несколько картинок одинакового размера (кадры мультирисунка), одна из
|
||
которых отображается на экране. </p>
|
||
<p>Мультирисунки удобно использовать для графических объектов,
|
||
имеющих несколько состояний. Например, для игрового объекта в мультирисунке
|
||
хранятся все его повороты: вверх, вниз, вправо, влево. Мультирисунки удобно
|
||
использовать также для создания спрайтов - анимационных рисунков с автоматически
|
||
меняющимися кадрами. Однако, для спрайтов предназначен специальный класс
|
||
<code>SpriteABC</code>, расположенный в модуле <code>
|
||
ABCSprites</code>. </p>
|
||
<p>Рассмотрим создание мультирисунка из четырех рисунков,
|
||
каждый из которых находится в отдельном файле:</p>
|
||
<blockquote>
|
||
<p><code><b>uses</b> ABCObjects,GraphABC;</code></p>
|
||
<p><code><b>var</b> p: MultiPictureABC;</code></p>
|
||
<p><code><b>begin</b><br>
|
||
p := <span lang="en-us"><b>new</b> </span>MultiPictureABC(50,50,'multi1.bmp');<br>
|
||
p.Add('multi2.bmp');<br>
|
||
p.Add('multi3.bmp');<br>
|
||
p.Add('multi2.bmp');<br>
|
||
<b>end</b>.</code></p>
|
||
</blockquote>
|
||
<p>После запуска программы в графическом окне отображается
|
||
рисунок из первого кадра.</p>
|
||
<p>Для смены рисунка достаточно изменить свойство <code>
|
||
CurrentPicture</code>:</p>
|
||
<blockquote>
|
||
<p><code>p.CurrentPicture := 2;</code></p>
|
||
</blockquote>
|
||
<p>Можно также циклически перейти к следующему рисунку:</p>
|
||
<blockquote>
|
||
<p><code>p.NextPicture;</code></p>
|
||
</blockquote>
|
||
<p>или к предыдущему рисунку:</p>
|
||
<blockquote>
|
||
<p><code>p.PrevPicture;</code></p>
|
||
</blockquote>
|
||
<p>Нетрудно организовать анимацию, состоящую в последовательной
|
||
циклической смене рисунков:</p>
|
||
<blockquote>
|
||
<p><code><b>while</b> True <b>do</b><br>
|
||
<b>begin</b><br>
|
||
p.NextPicture;<br>
|
||
Sleep(100);<br>
|
||
<b>end</b>;</code></p>
|
||
</blockquote>
|
||
<p>Мультирисунок после создания хранится не в виде
|
||
последовательности отдельных рисунков, а в виде одного "длинного"
|
||
рисунка, в
|
||
котором все кадры-рисунки расположены последовательно по горизонтали. Такой "длинный"
|
||
рисунок можно сохранить в файл для последующего использования:</p>
|
||
<blockquote>
|
||
<p><code>p.Save('multipic.gif');</code></p>
|
||
</blockquote>
|
||
<p>После этого мультирисунок можно создавать непосредственно из
|
||
файла с "длинным" рисунком, указывая в качестве дополнительного параметра
|
||
ширину одного кадра:</p>
|
||
<blockquote>
|
||
<p><code>p := <b><span lang="en-us">new </span></b>MultiPictureABC(50,50,100,'multipic.gif');</code></p>
|
||
</blockquote>
|
||
<p>Третий параметр здесь указывает ширину одного кадра.</p>
|
||
<p>Следует еще раз отметить, что спрайты <code>SpriteABC</code>
|
||
полностью перекрывают по возможностям мультирисунки (они имеют
|
||
состояния, задаваемые строковыми константами, а также автоматически анимируются по таймеру,
|
||
причем, скорость анимации можно задавать индивидуально для каждого спрайта).
|
||
Однако, спрайты немного сложнее создавать и, кроме того, они требуют достаточно
|
||
больших ресурсов процессора при анимации.</p>
|
||
</body>
|
||
|
||
</html> |