pascalabcnet/PABCNetHelp/PABCUnits/ABCObjects/MultiPictureReview.html

83 lines
3.3 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>