Flash-приложение на ActionScript 3 для программистов ;). Урок второй.

В прошлом уроке я немножко рассказал о структуре флеш-приложения, и как оно будет выглядеть в дальнейшем, в этом уроке я расскажу о базовой отрисовке спрайтов и о том как создать прелоадер.Обратимся к первому уроку, там в коде есть такая строчка CurrWdg.draw(graphics);, она означает что текущей форме которая сейчас активна передается графический инстанс, на который и будет выводиться графика. CurrWdg – хранит информацию о текущей форме, для которой будут выполняться события такие как update,draw, mousemove и другие. Для управления формами, можно создать отдельный класс, либо осуществлять это из класса Main, либо из классов конкретных форм, это вы должны решить сами, возможно вы совсем откажетесь от использования форм.
И так, поговорим об отрисовке спрайтов, в начале создадим базовый класс отрисовки, назовем его CDraw, его объявление будет выглядеть примерно так:
public class CDraw extends Sprite
{
}

В качестве базового класса CDraw, выступает класс Sprite, в принципе можно обойтись и без него, но он может пригодиться для получения графического инстанса отрисовки, если его не передаем. Я же(как показано выше) буду его передавать, поэтому наследовать Sprite не обязательно.
Примечание: все функции в данном классе объявляются статическими(модификатор static) для того чтобы к ним можно было обратиться из любой части программы.
В деталях рассмотрим одну из функций этого класса, которая была мной написана:
static public function DrawImage1(g:Graphics, img:Bitmap, x:int, y:int):void
{

if (x >= 560 || y >= 420)//1
return;//2
var w:int = img.width;//3
var h:int = img.height;//4
if (x + w > 560)//5

w = 560 – x;//6
if (y + h > 420)//7
h = 420 – y;//8
var mat:Matrix = new Matrix();//9
mat.identity();//10
mat.translate(x, y);//11
g.beginBitmapFill(img.bitmapData, mat, false, false);//12
g.drawRect(x, y, w, h);//13
g.endFill();//14

}
Передаваемые параметры:
g:Graphics – графический инстанс передаваемый из класса Main
img:Bitmap – изображение, спрайт(в первом уроке показано как загружать изображения, на примере изображения курсора)
x:int, y:int – начальные координаты отрисовки спрайта
В первой же строчке «if(x>=560||y>=420)» я делаю проверку не выходят ли рисуемые координаты за границы экрана, если выходят, то не стоит спрайт даже отрисовывать.
Примечание: размер моего флеш-приложения составляет 560×420
В строчках с третьей по восьмую, я получаю размеры изображения, и если они выходят за границы моего экрана – я их не рисую(фактически я выполняю функцию clipRect)
Примечание: если вы не будете выполнять отсечение(если оно конечно же необходимо), тогда при изменении размеров в проигрывателях, или еще где, возможно появление артефактов, т.е. отрисовки неотсеченных спрайтов выступающих за границы приложения.
В девятой и десятой строчке – осуществляется создание новой матрицы и ее приведение к единичной.
В одиннадцатой строчке сдвигаем матрицу на нужную позицию
В двенадцатой начинаем отрисовывать спрайт, фактически передаем сам спрайт, матрицу преобразований для этого спрайта, остальные два параметра отвечают за повтор и за сглаживание переданного спрайта при растяжении.
В тринадцатой, делаем видимым спрайт в координатах x и y и с шириной и высотой, w и h соответственно.
В четырнадцатой строчке завершаем отрисовку.
У нас есть простейшая функция вывода спрайта на экран, попробуем сделать банальный загрузчик, для этого создадим проект с прелоадером.
Чтобы использовать в прелоадере спрайты, звуки, текстовые данные, их объявления должны быть помещены именно в класс прелоадера, а не в какой-нибудь другой класс. Потому как в первую очередь загрузяться они и начнется воспроизведение прелоадера, пока не загрузиться остальная часть приложения.
Объявим две глобальных переменных для того чтобы отслеживать загрузку:
private var bytesLoaded:Number = 0;
private var bytesTotal:Number = 0;
и их обновление поместим в функцию обработки загрузки
private function progress(e:ProgressEvent):void
{

bytesLoaded = e.bytesLoaded;
bytesTotal = e.bytesTotal;

}
а так же добавим обработку функции рендера в инициализацию прелоадера (функция Preloader):
addEventListener(Event.RENDER, render);
и не забудем удалить эту обработку после того как прелоадер отработал (функция startup):
removeEventListener(Event.RENDER, render);
Теперь осталась функция рендера:
private function render(e:Event):void
{

var i:Number = 560*bytesLoaded/bytesTotal;//вычисляем координату X для движущегося объекта(к примеру это может быть пуля летящая с лева на право)
graphics.clear();//очищаем поверхность
CDraw.DrawImage1(graphics, pic_Back, 0, 0);//рисуем фон
CDraw.DrawImage1(graphics, pic_Object, i, 0);//рисуем движущийся объект

}
Пожалуй это все, что я хотел поведать о прелоадере. В следующем уроке я покажу как выводить текст и пару новых функций отрисовки спрайтов, которые вы в принципе можете уже написать сами.

Похожие записи:

4 Responses to Flash-приложение на ActionScript 3 для программистов ;). Урок второй.
  1. Budy Reply

    Поправьте цвета пожалуйста, нечитабельно

  2. Budy Reply

    Скажите, а когда будет продолжение, в частноти:
    “В следующем уроке я покажу как выводить текст и пару новых функций отрисовки спрайтов, которые вы в принципе можете уже написать сами.”

    • Bourn Reply

      продолжение уже написано почти – только из-за недостатка времени отложено, ну если надо постораюсь его закончить в ближайшее время

      • Budy Reply

        Очень надо. И побольше интересных примеров блоков кода )))

Leave a Reply

Your email address will not be published. Please enter your name, email and a comment.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">