pascalabcnet/PABCNetHelp/PABCUnits/ABCObjects/MultiPictureReview.html

83 lines
4.8 KiB
HTML
Raw Permalink Normal View History

<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>
&nbsp; p := <span lang="en-us"><b>new</b> </span>MultiPictureABC(50,50,'multi1.bmp');<br>
&nbsp; p.Add('multi2.bmp');<br>
&nbsp; p.Add('multi3.bmp');<br>
&nbsp; 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>
&nbsp; p.NextPicture;<br>
&nbsp; Sleep(100);<br>
<b>end</b>;</code></p>
</blockquote>
<p>Мультирисунок после создания хранится не в виде
последовательности отдельных рисунков, а в виде одного &quot;длинного&quot;
рисунка, в
котором все кадры-рисунки расположены последовательно по горизонтали. Такой &quot;длинный&quot;
рисунок можно сохранить в файл для последующего использования:</p>
<blockquote>
<p><code>p.Save('multipic.gif');</code></p>
</blockquote>
<p>После этого мультирисунок можно создавать непосредственно из
файла с &quot;длинным&quot; рисунком, указывая в качестве дополнительного параметра
ширину одного кадра:</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>