Рубрика | AS3, Flash

Метки | ,

AS3 (урок 2)

Опубликовано: 20 Январь 2010. Автор: kFrame

Снова привет, сейчас разберем что такого мы понаписывали в предыдущем посте и научимся отображать объекты на экране используя скрипт. Буков много - картинок не очень.

Представьте что Вы собрались создать что-то с нуля, не важно что, ну например спичку :-) . И подходя к этому делу со всей серьезностью, Вы просто обязаны создать кучу документации: чертежи деревяной палочки (форма, геометрические размеры), требования к древесине (порода, содержание смол, и т.д.), состав и цветовые варианты серы, технология изготовления самой спички и т.д. Представили? Замечательно, так вот чертежи и указания по созданию какого либо объекта являются классом. А вот объект это воплощение класса в жизнь. Его еще могут называть экземпляром класса (например соседский Акито - объект или экземпляр принадлежащий к классу пудель). Когда создают программы с помощью классов и объектов это и зовется объектно-ориентированым программированием (ООП). Но клас не обязательно должен описывать что-то что можно пощупать (или в случае flash - увидеть). К примеру класс int - является классом целых чисел, и описывает как должны вести себя целые числа при сложении, умножении и т.д. С понятиями подклассов, надклассов и прочим наследованием познакомимся в других статьях.

Сегодня нам понадобится общее понимание классов MovieClip и Sprite, а также понятие пакета. MovieClip - это класс который может  отображать на экране графику и имеет временную шкалу, т.е. может состоять из многих кадров. Если мы не указываем ничего в поле Class (смотри предыдущий пост), то по умолчанию создается экземпляр именно этого класса и все анимации, рисунки, скрипты и прочее будут находится внутри него. Sprite - тот же MovieClip, но состоит из единственного кадра и не имеет временной шкалы. Он так же как и MovieClip может отображать графику и содержать в себе другие элементы. Осталось выяснить что же такое пакет. Пакет - это блок, содержащий набор класов и других элементов использующихся в программе. Вроде не сложно :-)

Еще немного теории. Запускаем флеш и открывает два наших файла (.fla и .as). переключаемся на файл test.as (у меня он называется именно так), и смотрим на первую строку: package . Так мы сообщаем компилятору (программе которая волшебным образм :-) ) превращает код в swf-файл при необходимости используя графические и неграфические объекты) что используем пакет. Обычно после слова package идет его имя, представляющее собой путь к данному файлу (исключая само имя файла), начиная от папки содержащей весь проект, только вместо слеша ствится точка. Например, рядом с нашими файлами создадим папку main и переместим файл test.as в нее теперь чтобы все работало коректно мы должны после слова package написать main, а в фла файле в поле Class вместо test написать main.test :-) . Первая открывающая скобка и последняя закрывающая ограничивают описание класса в данном файле.

Идем дальше, слегка перепрыгнем - строка public class test extends Sprite . Слово public указывает на открытость класса - что оно, как и куда крепится разберем позже, первое время будем писать public везде. Слово class - служебное слово указывает что дальше будет идти название класса, в нашем случае test. Далее extends - еще одно служебное слово говорящее компилятору что далее идет название класса который мы берем за основу, т.е. функционал которого будем расширять. В примере мы расширяли класс Sprite, но что бы его использовать мы должны сначала присоединить его описание к нашей программе, именно это и делает строка import flash.display.Sprite; У нас осталась строка public function test() , служебное слово function говорит что дальше идет название функции, у нас это test. Обратите внимание на такой момент название файла, название класса и название функции совпадают! В описании класса могут быть и чаще всего есть и другие функции, естественно называются они по другому - общее название методы или функции класса, но функция название которой совпадает с названием класса должна быть обязательно! Она называется конструктор и ее назначение создать экземпляр класса.

И немного практики.переходим в fla-файл и создаем какую-нибудь графику: кружок, квадратик, смайлик в шапке викинга. Выделяем и жмем F8 появилось окошко. В поле Name пишем название например hero. Type оставляем MovieClip, а в Registration выбираем точку которая будет служить для символа hero началом отсчета. Еще нам надо поставить галочку напротив Export for ActionScript т.е. что мы разрешаем использование данного символа в программном коде. Поля Class и Base class заполнятся сами - пока их так и оставляем. Обратите внимание в поле Base class появилась ссылка на класс MovieClip, таким образом мы создаем класс hero расширяя MovieClip. Очищаем рабочее пространство, при желании можно удалить кадр в котором мы создавали графику и переходим в test.as.

Убираем строку trace("Халло, ворлд!"); и пишем :

var myHero:hero = new hero();
addChild(myHero);

Запускаем Ctrl+Enter и радуемся, лицезрея нашего героя. Теперь разберем что же мы такого написали. Слово var указывает что мы создаем переменную и дальше будет идти ее название myHero. Двоеточие указывает что дальше идет тип переменной, т.е. запись var myHero:hero говорит о том что мы создали переменную myHero и указали какого она будет типа. Остаток строки говорит что мы создаем новый экземпляр типа hero и связываем его с этой переменной. Вторая строка addChild(myHero); добавляет myHero в список отображения. Думаю из названия понятно назначение этого элемента. По умолчанию  myHero имеет координаты (0;0) - не удивляйтесь, но во flash (0;0) это левый верхний угол.  Координаты меняются легко - после создания переменной myHero запишите myHero.x=100; Координата y меняется аналогично. Жмем Ctrl+Enter и проверяем.

Думаю на сегодня хватит )).

Bookmark and Share

3 Комментарии к этой статье

  1. odissey пишет:

    хороший урок. Спасибо. Надо еще разок прочесть для закрепления материала :)

  2. odissey пишет:

    тип переменной по идее стандартное название, а в данной строке: var myHero:hero – «hero» вроде мы сами придумали. Получается что мы сами придумали тип переменной? Не понимаю…

  3. kFrame пишет:

    смотрим на скриншот.
    Class: hero
    Base class: flash.display.MovieClip
    т.е. класс hero по сути это расширеный класс MovieClip, а всё расширение состоит в том что мы запихнули в мувиклип конкретное графическое наполнение.
    Мы с тем же успехом могли написать var myHero:MovieClip = new hero(); и все сработало бы, правда нужно было бы импортировать дополнительно сам класс MovieClip.
    Или такой вариант – Base class записываем flash.display.Sprite а все ту же строку переписываем var myHero:Sprite = new hero(); – опять же все сработает и импортированым останется единственный класс flash.display.Sprite

Ваш отзыв

Advertise Here
Advertise Here