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




25 Янв 2010 в 21:54
хороший урок. Спасибо. Надо еще разок прочесть для закрепления материала
26 Янв 2010 в 17:48
тип переменной по идее стандартное название, а в данной строке: var myHero:hero – «hero» вроде мы сами придумали. Получается что мы сами придумали тип переменной? Не понимаю…
26 Янв 2010 в 21:27
смотрим на скриншот.
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