2018-08-02 22:04:49 +03:00
|
|
|
|
<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>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<H1>Мультирисунки</H1>
|
|
|
|
|
|
<p>Мультирисунок представляет собой объект класса <code>MultiPictureABC</code>
|
|
|
|
|
|
и содержит несколько картинок одинакового размера (кадры мультирисунка), одна из
|
|
|
|
|
|
которых отображается на экране. </p>
|
|
|
|
|
|
<p>Мультирисунки удобно использовать для графических объектов,
|
|
|
|
|
|
имеющих несколько состояний. Например, для игрового объекта в мультирисунке
|
|
|
|
|
|
хранятся все его повороты: вверх, вниз, вправо, влево. Мультирисунки удобно
|
|
|
|
|
|
использовать также для создания спрайтов - анимационных рисунков с автоматически
|
|
|
|
|
|
меняющимися кадрами. Однако, для спрайтов предназначен специальный класс
|
|
|
|
|
|
<code>SpriteABC</code>, расположенный в модуле <code>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
ABCSprites</code>. </p>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Рассмотрим создание мультирисунка из четырех рисунков,
|
|
|
|
|
|
каждый из которых находится в отдельном файле:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<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>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>После запуска программы в графическом окне отображается
|
|
|
|
|
|
рисунок из первого кадра.</p>
|
|
|
|
|
|
<p>Для смены рисунка достаточно изменить свойство <code>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
CurrentPicture</code>:</p>
|
|
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>p.CurrentPicture := 2;</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Можно также циклически перейти к следующему рисунку:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>p.NextPicture;</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>или к предыдущему рисунку:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>p.PrevPicture;</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Нетрудно организовать анимацию, состоящую в последовательной
|
|
|
|
|
|
циклической смене рисунков:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<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>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Мультирисунок после создания хранится не в виде
|
|
|
|
|
|
последовательности отдельных рисунков, а в виде одного "длинного"
|
|
|
|
|
|
рисунка, в
|
|
|
|
|
|
котором все кадры-рисунки расположены последовательно по горизонтали. Такой "длинный"
|
|
|
|
|
|
рисунок можно сохранить в файл для последующего использования:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>p.Save('multipic.gif');</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>После этого мультирисунок можно создавать непосредственно из
|
|
|
|
|
|
файла с "длинным" рисунком, указывая в качестве дополнительного параметра
|
|
|
|
|
|
ширину одного кадра:</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
<blockquote>
|
|
|
|
|
|
<p><code>p := <b><span lang="en-us">new </span></b>MultiPictureABC(50,50,100,'multipic.gif');</code></p>
|
|
|
|
|
|
</blockquote>
|
2025-11-07 16:12:31 +03:00
|
|
|
|
<p>Третий параметр здесь указывает ширину одного кадра.</p>
|
|
|
|
|
|
<p>Следует еще раз отметить, что спрайты <code>SpriteABC</code>
|
|
|
|
|
|
полностью перекрывают по возможностям мультирисунки (они имеют
|
|
|
|
|
|
состояния, задаваемые строковыми константами, а также автоматически анимируются по таймеру,
|
|
|
|
|
|
причем, скорость анимации можно задавать индивидуально для каждого спрайта).
|
|
|
|
|
|
Однако, спрайты немного сложнее создавать и, кроме того, они требуют достаточно
|
|
|
|
|
|
больших ресурсов процессора при анимации.</p>
|
2018-08-02 22:04:49 +03:00
|
|
|
|
</body>
|
|
|
|
|
|
|
|
|
|
|
|
</html>
|