Расчет результирующих векторов после столкновения двух шаров с разной массой
Скачать исходные коды (3.4 Мб)
Знакомство с Flash 9.
Для начала скачиваем «Flash Professional 9 ActionScript 3.0 Preview» отсюда http://labs.adobe.com/technologies/flash9as3preview/ (106 Мб)
Ставим, запускаем (потребуется лицензионный ключ от Flash 8)… Видим тот же Flash 8.0 с возможностью компиляции под Player 9 и ActionScript 3.0. Сойдет. Для начала стоит посмотреть примеры из Help-а, жмем F1… и тут, меня ждал первый сюрприз, Help девственно чист. Чтобы убедиться, что он реально отсутствует, а не просто криво настроен, нахожу папку, где должен быть хэлп
C:\Documents and Settings\All Users\Application Data\Adobe\Flash 9 Public Alpha\en\Configuration\HelpPanel
И убеждаюсь… его там нет :(
Придется пользоваться лайвдоками http://www.adobe.com/go/AS3LR
Ладно, для начала посмотрим основные отличия AS3 от AS2.
http://livedocs.macromedia.com/flex/2/langref/migration.html
Можно посмотреть демонстрационные программы, например, отсюда:
http://download.macromedia.com/pub/labs/flash9as3/as3_labs_samples_062706.zip
И вот интересная статья (на английском), где все доходчиво объясняют:
http://www.senocular.com/flash/tutorials/as3withmxmlc/ правда про Flex, но в данном случае разница минимальна.
Весь код находится внутри классов, которые подчиняются строгой иерархии. Кто чей папа должно быть строго указано :) У нового создаваемого .fla файла можно прописать имя главного класса, который запускается самым первым. Попробуем создать флешку выводящую "Hello world"
Жмем Ctrl-N, в самом низу интерфейса Flash есть строчка Document class
Рис. 1
Пишем туда main.test1 это будет наш root, здесь все, что разделено точками название папок, в нашем случае папка main, если будет написано examples.ex1.Simple то этот класс следует искать в папке examples и подпапке ex1. Последним идет имя класса. Напишем сам скрипт:
В объявлении класса нужно указывать область видимости, от кого наследуется и т.п. Полный формат:
Забываем про то, что такое номер слоя и как с ними мучались в AS2, при динамическом создании объектов приходилось помнить, какой мувик на каком слое, и не дай бог, приаттачить два мувика на один слой… Забыли :) Теперь для добавления нового визуального объекта к существующему нужно вызвать функцию addChild (см. так же addChildAt, removeChild, removeChildAt). Объекты располагаются друг над другом в порядке добавления.
Добавим в наш скрипт вывод текста на экран.
Добавился новый import, приходится все время указывать в import все, что мы используем в своем проекте, иначе компилятор ругается на несуществующий класс (почему бы ему самому не искать в дефолтных imports?). Ладно, смотрим… текст есть:
Если необходимо внутри мувика что-то нарисовать (прямоугольник и т.п.) необходимо подключить класс
и рисовать на graphics (этот класс присутствует во всех визуальных объектах). Например, нарисуем красный круг с черной рамкой.
Да, да, да! Теперь можно рисовать круги, вызывая одну функцию, не изобретая извращения с выводом 8-ми кривых координаты которым приходилось высчитывать через синус-тангенс… пример, просто для общего развития
Забываем про
Теперь все построено на событиях. Для того чтобы отловить клик мышки по объекту необходимо добавить свою функцию, как реагирующую на событие "click":
Разные классы генерируют разные события, какие именно нужно читать документацию, например события в классе MovieClip http://livedocs.macromedia.com/flex/2/langref/flash/display/MovieClip.html#eventSummary
Появилась возможность реагировать на даблклик. Для теста попробуем создать кнопку, исчезающую по двойному клику. Создаем новую флешку (Ctrl-N), рисуем кнопку, превращаем ее в MovieClip (выделить, кликнуть правой кнопкой мыши «Convert to symbol»), в Linkage созданного мувика указываем название класса main.myButton
Создаем файл myButton.as в папке main с таким текстом
Во-первых, надо подключить классы Event и MouseEvent. Во-вторых, в документации узнаем, что для того чтобы работал даблклик надо его разрешить doubleClickEnabled, по умолчанию равно false и такое событие не генерится. В-третьих, свойства _visible у мувиклипа больше нет, теперь это visible.
Кнопка пропадает по двойному клику
Объявляя переменную теперь обязательно указывать ее тип
И это правильно, т.к. приучает к порядку и спасает от многих глупых ошибок. Остается возможность указать переменную произвольного типа
Но необходимости в этом я пока не вижу.
У функции обязательно указывать тип возвращаемых данных, и если она ничего не возвращает, то указываем void (с маленькой буквы)
Обязательно указывать какие аргументы получает функция, и какого типа. Если необходимо вызывать функцию, передавая ей не все переменные, то необязательным аргументам нужно присвоить дефолтные значения через знак равно. Например:
Если нужно будет вызывать функцию с любым количеством аргументов, то пишем три точки и название массива, в который и будут записаны все передаваемые аргументы. Например:
Переменная ar в данном случае является массивом. Для примера, функция, которая подменяет в строке '%s' на передаваемые аргументы:
Появился новый удобный оператор for each для перебора всех значений в массиве или объекте:
Результатом будет:
1
5
78
32
9