Полная версия этой страницы:
Изучение ActionScript 3.0
fremdizar
14.10.2010 - 10:23
Всем привет!Читал вчера до 2-х ночи вторую главу из офф. книги от Адоб ActionScript 3.0... В полном обломе... Так не понятно, что даже вопрос сформулировать не могу...

Сегодня будет дубль №2 этой же главы!
PS
Я ща представляю что там в главе 5-6 творится... сколько дублей понадобится? ...
Ты хочешь познакомится с программой Flash или с языком ActionScript? Ты знаешь базовые понятия, которые связаны с Flash? Разбираешься в программе? Возможно ты не ту книгу начал читать.
fremdizar
14.10.2010 - 11:30
Цитата(HaWK @ 14.10.2010 - 12:21)

Ты хочешь познакомится с программой Flash или с языком ActionScript? Ты знаешь базовые понятия, которые связаны с Flash? Разбираешься в программе? Возможно ты не ту книгу начал читать.
Я прошел этот учебник совсем недавно:

На сколько я понял это вторая часть:

Книгу Колина Мука тоже приобрел. Думаю после второго тома официальной литературы можно будет перейти на книгу Мука.
Сам Флеш немного знаю.
Кстати если ты не знаешь, сейчас уже вышел Flash CS5 так что адаптируйся под нёго. А если знаешь Flash, то заканчивай и принимайся за Колина Мука. Так как если хочешь сделать что-то серьёзное на платформе Flash надо знать ActionScript 3.
fremdizar
14.10.2010 - 11:41
Цитата(HaWK @ 14.10.2010 - 12:33)

Кстати если ты не знаешь, сейчас уже вышел Flash CS5 так что адаптируйся под нёго. А если знаешь Flash, то заканчивай и принимайся за Колина Мука. Так как если хочешь сделать что-то серьёзное на платформе Flash надо знать ActionScript 3.
Именно поэтому и взялся за второй том, он посвящен только ActionScript 3. Flash CS5 у меня есть, скачал Adobe Creative Suit CS5

практически на второй день после объявления релиза.
Вот и молодец. В принципе СS4 и CS5 похожи. В CS5 есть только немного полезных нововведений. Удачи в изучении AS3.
fremdizar
14.10.2010 - 11:47
Цитата(HaWK @ 14.10.2010 - 12:43)

Вот и молодец. В принципе СS4 и CS5 похожи. В CS5 есть только немного полезных нововведений. Удачи в изучении AS3.
Вот как раз удача и нужна! Спасибо за пожелание.
А язык все же не из легких, может он так тяжело мне дается...
ActionScript ещё не самый тяжёлый язык. Если знаком с основами программирования, будет не так тяжело его освоить. Ты на друигх языках программил когда-нибудь?
Тебя как зовут то? Ник у тебя уж больно сложный.
fremdizar
14.10.2010 - 11:55
Цитата(HaWK @ 14.10.2010 - 12:48)

ActionScript ещё не самый тяжёлый язык. Если знаком с основами программирования, будет не так тяжело его освоить. Ты на друигх языках программил когда-нибудь?
Тебя как зовут то? Ник у тебя уж больно сложный.
Меня зовут Дима

Знаком с Alias Maya MEL, но давно не использовал в работе.
Я не программировал никогда, пытался в свое время С++, но забросил, слишком сложно показалось тогда.
Цитата
Меня зовут Дима
Меня зовут Тимур, приятно познакомится.
ActionScript однозначно легче в изучении, чем С++. Так что не бойся учить языки программирования. Я за три года освоил AS1, AS2, AS3. Сейчас разрабатываю онлайн-игры на AS3.
fremdizar
14.10.2010 - 12:12
Цитата(HaWK @ 14.10.2010 - 13:09)

Меня зовут Тимур, приятно познакомится.
ActionScript однозначно легче в изучении, чем С++. Так что не бойся учить языки программирования. Я за три когда освоил AS1, AS2, AS3. Сейчас разрабатываю онлайн-игры на AS3.
Я за три когда освоил AS1, AS2, AS3. не понял. За 3 года?
да да, опечатка. за три года.
fremdizar
14.10.2010 - 20:51
Цитата(HaWK @ 14.10.2010 - 13:14)

да да, опечатка. за три года.
Чем дальше углубляюсь, тем запутанней и сложней...
Ты практикуйся. Чтобы запоминать теорию
chingachgoog
15.10.2010 - 18:21
Сам по себе - КАК ЯЗЫК - ActionScript (любой версии) простой как пробка. Ну AS3 чуть осложнили типизацией и пространством имен.
Но сам по себе - КАК ЯЗЫК - AS практически ничего не умеет из того, что нужно обычному пользователю.
То что нужно пользователю сокрыто в API различных объектах/классах AVM и ФП. К AS КАК ЯЗЫКУ это уже не имеет почти никакого отношения.
Это как JavaScript. Сам по себе он практически ничто. И прост как табуретка.
Но зная API к объекту DOM конкретного браузера, JS творит чудеса.
Поэтому изучать надо именно объекты конкретной среды (браузера, ФП и т.п.). Их свойства, методы, события. Их реальное взаимодействие и механизмы. А язык - дело наживное и десятое. Можно вообще AS не использовать, а какой-нибудь HaXe. Вот в .NET давно такое положение дел - выбирай язык, какой хочешь - все равно IL-код (аналог байт-кода swf) получится практически одинаковой.
Тем не менее на этом языке творят...
fremdizar
17.10.2010 - 19:34
С третьего раза все же дочитал вторую главу...
3-й урок книги:Код
star_mc.addEventListener (MouseEvent.CLICK, rotateStar);
function rotateStar (e:MouseEvent):void
{
star_mc.rotation += 5;
}
addEventListener (Event.ENTER_FRAME, starMove);
function starMove (e:Event):void
{
if (star_mc.x<stage.stageWidth)
{
star_mc.x+=2;
}
else
{
star_mc.x=0;
}
}
Я не совсем понял, вот этот отрывок кода:
Код
addEventListener (Event.ENTER_FRAME, starMove);
До addEventListener не обязательность что-то должно стоять? К примеру, название функции или переменной?
Все работает! Просто не совсем логично.
И еще:
stage.stageWidth - это подразумевается окно не мува,, а окно флеша, на сколько я тестил. А есть ли подобное для именно мува?
Цитата
stage.stageWidth - это подразумевается окно не мува,, а окно флеша, на сколько я тестил. А есть ли подобное для именно мува?
Для мувиклипа есть MovieCLip.width.
Цитата
Все работает! Просто не совсем логично.
Что тебе именно не понятно?
fremdizar
17.10.2010 - 19:55
Цитата(HaWK @ 17.10.2010 - 20:44)

Для мувиклипа есть MovieCLip.width.
Спасибо!
Цитата(HaWK)
Что тебе именно не понятно?
Я бы подумал что так надо писать:
star_mc.addEventListener (Event.ENTER_FRAME, starMove);
Это потому что, то положение в коде где пишется addEventListener, это есть "левая часть" для этой функции. Когда эта функция находится внутри своего родителя можно его не писать слева от неё. Здесь подразумевается, что обработчик событий ENTER_FRAME присваивается к главной сцене, в которой этот код и пишется.
fremdizar
17.10.2010 - 19:59
Самое прикольное, что и так работает без ошибок...
Код
star_mc.addEventListener (MouseEvent.CLICK, rotateStar);
function rotateStar (e:MouseEvent):void
{
star_mc.rotation += 5;
}
[b]star_mc.[/b]addEventListener (Event.ENTER_FRAME, starMove);
function starMove (e:Event):void
{
if (star_mc.x<stage.stageWidth)
{
star_mc.x+=2;
}
else
{
star_mc.x=-15;
}
}
var instrument:MovieClip=banjo;
violin.addEventListener (MouseEvent.CLICK, onViolin);
banjo.addEventListener (MouseEvent.CLICK, onBanjo);
trumpet.addEventListener (MouseEvent.CLICK, onTrumpet);
glock.addEventListener (MouseEvent.CLICK, onGlock);
function onViolin (e:MouseEvent):void
{
instrument=violin;
instrument_txt.text="The violin has been selected.";
}
function onBanjo (e:MouseEvent):void
{
instrument=banjo;
instrument_txt.text="The banjo has been selected.";
}
function onTrumpet (e:MouseEvent):void
{
instrument=trumpet;
instrument_txt.text="The trumpet has been selected.";
}
function onGlock (e:MouseEvent):void
{
instrument=glock;
instrument_txt.text="The glock has been selected.";
}
Работает потому, что коду который исполняется внутри функции starMove всё равно к кому привязан обработчик событий ENTER_FRAME к мувиклипу (star_mc) или к сцене.
fremdizar
17.10.2010 - 20:03
Цитата(HaWK @ 17.10.2010 - 20:56)

Это потому что, то положение в коде где пишется addEventListener, это есть "левая часть" для этой функции. Когда эта функция находится внутри своего родителя можно его не писать слева от неё. Здесь подразумевается, что обработчик событий ENTER_FRAME присваивается к главной сцене, в которой этот код и пишется.
Ах, вот оно что... И где "левая часть" заканчивается?
PSМожно сюда вставлять файлы примеров, может кому то будет интересно?
Так что если ты пишешь просто addEventListener без левого "друга" тем самым ты привязываешь этот обработчик к сцене, а если пишешь слева название мувика, то соответственно заставляешь слушать этот мувик событие ENTER_FRAME.
fremdizar
17.10.2010 - 20:08
Цитата(HaWK @ 17.10.2010 - 21:04)

если ты пишешь просто addEventListener без левого "друга" тем самым ты привязываешь этот обработчик к сцене
Может не к сцене, а к
star_mc потому что именно к нему и привязался? Или я ошибаюсь? В принципе если вызывается функция
ENTER_FRAME, то значит это применяется к ко всему
stage?
Событие ENTER_FRAME могут слушать как сцена так и мувики. Зависит от того к кому привяжешь.
fremdizar
19.10.2010 - 11:30
Цитата(HaWK @ 17.10.2010 - 22:17)

Событие ENTER_FRAME могут слушать как сцена так и мувики. Зависит от того к кому привяжешь.
В данном примере ENTER_FRAME привязан к сцене или к star_mc?
Код
star_mc.addEventListener (MouseEvent.CLICK, rotateStar);
function rotateStar (e:MouseEvent):void
{
star_mc.rotation += 5;
}
addEventListener (Event.ENTER_FRAME, starMove);
function starMove (e:Event):void
{
if (star_mc.x<stage.stageWidth)
{
star_mc.x+=2;
}
else
{
star_mc.x=-15;
}
}
var instrument:MovieClip=banjo;
violin.addEventListener (MouseEvent.CLICK, onViolin);
banjo.addEventListener (MouseEvent.CLICK, onBanjo);
trumpet.addEventListener (MouseEvent.CLICK, onTrumpet);
glock.addEventListener (MouseEvent.CLICK, onGlock);
function onViolin (e:MouseEvent):void
{
instrument=violin;
instrument_txt.text="The violin has been selected.";
}
function onBanjo (e:MouseEvent):void
{
instrument=banjo;
instrument_txt.text="The banjo has been selected.";
}
function onTrumpet (e:MouseEvent):void
{
instrument=trumpet;
instrument_txt.text="The trumpet has been selected.";
}
function onGlock (e:MouseEvent):void
{
instrument=glock;
instrument_txt.text="The glock has been selected.";
}
grow_btn.addEventListener(MouseEvent.CLICK, grow);
shrink_btn.addEventListener(MouseEvent.CLICK, shrink);
rotate_btn.addEventListener(MouseEvent.CLICK, rotate);
hide_btn.addEventListener(MouseEvent.CLICK, hideClip);
show_btn.addEventListener(MouseEvent.CLICK, showClip);
fadeOut_btn.addEventListener(MouseEvent.CLICK, fadeOut);
fadeIn_btn.addEventListener(MouseEvent.CLICK, fadeIn);
function grow(e:MouseEvent):void {
instrument.scaleX += .1;
instrument.scaleY += .1;
}
function shrink(e:MouseEvent):void {
instrument.scaleX -= .1;
instrument.scaleY -= .1;
}
function rotate(e:MouseEvent):void {
instrument.rotation += 5;
}
function hideClip(e:MouseEvent):void {
instrument.visible = false;
}
function showClip(e:MouseEvent):void {
instrument.visible = true;
}
function fadeOut(e:MouseEvent):void {
instrument.alpha = .5;
}
function fadeIn(e:MouseEvent):void {
instrument.alpha = 1;
}
Цитата
star_mc.addEventListener (MouseEvent.CLICK, rotateStar);
Вот здесь привязан к star_mc, как ты и сам можешь видеть.
Цитата
addEventListener (Event.ENTER_FRAME, starMove);
А здесь к сцене.
fremdizar
19.10.2010 - 11:40
Код
var instrument:MovieClip=banjo;
Цитата
При создании переменой тип данных, которых хранится в переменной, записывается после названия переменной через двоеточие. Обратите внимание, что тип данных установлен как MoivieClip. Это значит, что значение instrument всегда будет ссылкой на MoivieClip.
В этом коде значением по умолчанию устанавливается банджо.
Я здесь не совсем понял:
1. В коде мы создали
instrument и назначили его в качестве банджо. Но при чем тут остальные инструменты? Откуда флеш знает что есть остальные инструменты? Может как то они сгруппированы?
2.
MovieClip - что это за тип данных?
MovieClip - это как бы мини-сцена, в которой может содержаться контент, в мувиклипе присутствует временная шкала с кадрами. Когда ты открываешь флэш там появляется сцена со шкалой, это тоже МувиКлип.
Цитата
1. В коде мы создали instrument и назначили его в качестве банджо. Но при чем тут остальные инструменты? Откуда флеш знает что есть остальные инструменты? Может как то они сгруппированы?
Не понял
fremdizar
19.10.2010 - 11:48
Цитата(HaWK @ 19.10.2010 - 12:46)

Не понял
Приложил файл.
У меня что-то не хочет качать. Объясни-ка по другому.
fremdizar
19.10.2010 - 11:59
Цитата(HaWK @ 19.10.2010 - 12:53)

У меня что-то не хочет качать. Объясни-ка по другому.
ОК!
В сцене несколько инструментов.

Суть в том что, при выборе одного из инструментов, щелкая по нижним кнопкам можно менять их свойства.
Код
var instrument:MovieClip=banjo;
Здесь мы задали переменную instrument с типом данных MovieClip и привязали к banjo. Откуда Флеш знает про наличии остальных инструментов? Как он меняет их свойства, когда мы их выделяем?
Наверное в эту самую переменную "instrument" заносится ссылка на мувиклип инструмента который выбрали. Если выбрали banjo, то в instrument поппадает banjo
fremdizar
19.10.2010 - 12:09
Цитата(HaWK @ 19.10.2010 - 13:03)

Наверное в эту самую переменную "instrument" заносится ссылка на мувиклип инструмента который выбрали. Если выбрали banjo, то в instrument поппадает banjo
Именно! Я только сейчас заметил
Код
instrument=glock;
В каждой функции это прописано.
Спасибо тебе!!!
fremdizar
19.10.2010 - 12:21
Пока пытаюсь анимировать плавные переходы возник вопрос:
Код
import fl.transitions.Tween;
Подгружает ли Флеш какие нибудь файлы в ролик? Влияет ли импорт классов, как в этом коде, на размер ролика? Кто-нибудь тестил?
fremdizar
19.10.2010 - 12:25
Относительно группировки, я видоизменил код так:
Код
star_mc.addEventListener (MouseEvent.CLICK, rotateStar);
function rotateStar (e:MouseEvent):void
{
star_mc.rotation += 5;
instrument=star_mc;
}
Теперь и свойства звездочки можно изменить, щелкнув на нижнее меню, то есть и ее привязал как и инструменты

. Круто! Слов нет!
fremdizar
19.10.2010 - 12:34
Код
function fadeOut(e:MouseEvent):void {
var tweenfadeOut:Tween = new Tween(instrument, "alpha", None.easeIn, 1, 0, 3, true)
}
После теста этого кода, я вспомнил про репортаж с афганской деревни, показанный очень давно по новостям. Там сельчане сидели и тупо смотрели на горящую лампочку, когда только провели им электричество...

Так и со мной... сижу и поражаюсь...
Флеш - это сказка!!!
Да, fremdizar, тебя много ещё открытий ждёт

Попробуй ещё вот так:
var tweenfadeOut:Tween = new Tween(instrument, "alpha",
Elastic.easeInOut, 1, 0, 3, true)
fremdizar
19.10.2010 - 12:47
Цитата(HaWK @ 19.10.2010 - 13:39)

Да, fremdizar, тебя много ещё открытий ждёт

Попробуй ещё вот так:
var tweenfadeOut:Tween = new Tween(instrument, "alpha",
Elastic.easeInOut, 1, 0, 3, true)
Слов нет....

СУПЕР!
Да, с Tween-ом можно себя развлечь
fremdizar
19.10.2010 - 12:52
Вместо этого:
Код
function grow(e:MouseEvent):void {
instrument.scaleX += .1;
instrument.scaleY += .1;
}
Хочу сделать вот так:
Код
function grow(e:MouseEvent):void {
var tweenGrow:Tween = new Tween(instrument, "scaleX", None.easeIn, 1, 0, 3, true);
}
Так работает, а кода добавляю второе свойство:
Код
var tweenGrow:Tween = new Tween(instrument, "scaleX, scaleY", None.easeIn, 1, 0, 3, true);
Так не работает...
Как добавить анимацию 2-х свойств одновременно scaleX и scaleY?
Сделать два твина:
Код
var tweenGrowX:Tween = new Tween(instrument, "scaleX", None.easeIn, 1, 0, 3, true);
var tweenGrowY:Tween = new Tween(instrument, "scaleY", None.easeIn, 1, 0, 3, true);
fremdizar
19.10.2010 - 13:15
Цитата(HaWK @ 19.10.2010 - 14:06)

Сделать два твина:
Код
var tweenGrowX:Tween = new Tween(instrument, "scaleX", None.easeIn, 1, 0, 3, true);
var tweenGrowY:Tween = new Tween(instrument, "scaleY", None.easeIn, 1, 0, 3, true);
А как сделать чтобы значение прибавлялись?
из:
instrument.scaleY
+= .1;
Код
var tweenGrowX:Tween = new Tween(instrument, "scaleX", Elastic.easeOut, 1, 0.5, 3, true);
fremdizar
19.10.2010 - 13:20
Немного видоизменил и сам в шоке от увиденного... Лепота...
Код
if (star_mc.x<stage.stageWidth)
{
star_mc.x+=1;
var tweenGrowX:Tween = new Tween(instrument, "scaleX", Elastic.easeOut, 1, 0.5, 3, true);
var tweenGrowY:Tween = new Tween(instrument, "scaleY", Elastic.easeOut, 1, 0.5, 3, true);
}
Ну, в роде всё правильно, мувик будет двигаться пока не достигнет границы сцены.
star_mc.x+=1;
И также выполнит анимацию:
var tweenGrowX:Tween = new Tween(instrument, "scaleX", Elastic.easeOut, 1, 0.5, 3, true);
var tweenGrowY:Tween = new Tween(instrument, "scaleY", Elastic.easeOut, 1, 0.5, 3, true);
fremdizar
20.10.2010 - 05:05
При импорте классов в сцену, размер файла увеличивается?
Да, увеличивается. Только без импорта не обойтись. Классы надо импортировать, чтобы их использовать.
fremdizar
23.10.2010 - 00:41
Код
package {
import flash.display.MovieClip;
public class Ellipse extends MovieClip {
public function Ellipse(w:Number=40,h:Number=40,color:unit=0xff000) {
graphics.beginFill(color);
graphics.begindrawEllipse(0,0,w,h);
graphics.endFill();
}
}
}
Относительно этого кода возникли два вопроса:
1. Мы создали класс
Ellipse, но и метод создали с таким же названием. Где здесь логика?
2. Откуда это взялось:
begindrawEllipse? Мы ведь не назначали свойства этого класса! Может это с родителя
MovieClip идет? Если так, то есть список всех свойств классов где-нибудь? Их надо учить наизусть?
Да и вообще, зачем импортировать класс, а потом переименовывать если название класса уже самом по себе служебное слово? Неужели трудно было сделать так, в случае если создается новый класс с зарезервированным служебным названием встроенного во Флеш класса, то он автоматом импортируется... Или я такой лентяй пару строк лень написать?