Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Изучение ActionScript 3.0
Flash Zone Forum > Общие форумы > Флейм
Страницы: 1, 2
fremdizar
Всем привет!

Читал вчера до 2-х ночи вторую главу из офф. книги от Адоб ActionScript 3.0... В полном обломе... Так не понятно, что даже вопрос сформулировать не могу... smile.gif

Сегодня будет дубль №2 этой же главы!

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

Я прошел этот учебник совсем недавно:


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

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

Именно поэтому и взялся за второй том, он посвящен только ActionScript 3. Flash CS5 у меня есть, скачал Adobe Creative Suit CS5 smile.gif практически на второй день после объявления релиза.
HaWK
Вот и молодец. В принципе СS4 и CS5 похожи. В CS5 есть только немного полезных нововведений. Удачи в изучении AS3.
fremdizar
Цитата(HaWK @ 14.10.2010 - 12:43) *
Вот и молодец. В принципе СS4 и CS5 похожи. В CS5 есть только немного полезных нововведений. Удачи в изучении AS3.

Вот как раз удача и нужна! Спасибо за пожелание.

А язык все же не из легких, может он так тяжело мне дается...
HaWK
ActionScript ещё не самый тяжёлый язык. Если знаком с основами программирования, будет не так тяжело его освоить. Ты на друигх языках программил когда-нибудь?
Тебя как зовут то? Ник у тебя уж больно сложный.
fremdizar
Цитата(HaWK @ 14.10.2010 - 12:48) *
ActionScript ещё не самый тяжёлый язык. Если знаком с основами программирования, будет не так тяжело его освоить. Ты на друигх языках программил когда-нибудь?
Тебя как зовут то? Ник у тебя уж больно сложный.

Меня зовут Дима smile.gif

Знаком с Alias Maya MEL, но давно не использовал в работе.

Я не программировал никогда, пытался в свое время С++, но забросил, слишком сложно показалось тогда.
HaWK
Цитата
Меня зовут Дима

Меня зовут Тимур, приятно познакомится.

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

ActionScript однозначно легче в изучении, чем С++. Так что не бойся учить языки программирования. Я за три когда освоил AS1, AS2, AS3. Сейчас разрабатываю онлайн-игры на AS3.

Я за три когда освоил AS1, AS2, AS3.  не понял. За 3 года?
HaWK
 да да, опечатка. за три года.
fremdizar
Цитата(HaWK @ 14.10.2010 - 13:14) *
да да, опечатка. за три года.

Чем дальше углубляюсь, тем запутанней и сложней...
HaWK
Ты практикуйся. Чтобы запоминать теорию smile.gif
chingachgoog
Сам по себе - КАК ЯЗЫК - ActionScript (любой версии) простой как пробка. Ну AS3 чуть осложнили типизацией и пространством имен.
Но сам по себе - КАК ЯЗЫК - AS практически ничего не умеет из того, что нужно обычному пользователю.

То что нужно пользователю сокрыто в API различных объектах/классах AVM и ФП. К AS КАК ЯЗЫКУ это уже не имеет почти никакого отношения.

Это как JavaScript. Сам по себе он практически ничто. И прост как табуретка.
Но зная API к объекту DOM конкретного браузера, JS творит чудеса.

Поэтому изучать надо именно объекты конкретной среды (браузера, ФП и т.п.). Их свойства, методы, события. Их реальное взаимодействие и механизмы. А язык - дело наживное и десятое. Можно вообще AS не использовать, а какой-нибудь HaXe. Вот в .NET давно такое положение дел - выбирай язык, какой хочешь - все равно IL-код (аналог байт-кода swf) получится практически одинаковой.
HaWK
Тем не менее на этом языке творят...
fremdizar
С третьего раза все же дочитал вторую главу... smile.gif

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 - это подразумевается окно не мува,, а окно флеша, на сколько я тестил. А есть ли подобное для именно мува?
HaWK
Цитата
stage.stageWidth - это подразумевается окно не мува,, а окно флеша, на сколько я тестил. А есть ли подобное для именно мува?

Для мувиклипа есть MovieCLip.width.

Цитата
Все работает! Просто не совсем логично.

Что тебе именно не понятно?
fremdizar
Цитата(HaWK @ 17.10.2010 - 20:44) *
Для мувиклипа есть MovieCLip.width.

Спасибо!
Цитата(HaWK)
Что тебе именно не понятно?

Я бы подумал что так надо писать:
star_mc.addEventListener (Event.ENTER_FRAME, starMove);
HaWK
Это потому что, то положение в коде где пишется addEventListener, это есть "левая часть" для этой функции. Когда эта функция находится внутри своего родителя можно его не писать слева от неё. Здесь подразумевается, что обработчик событий ENTER_FRAME присваивается к главной сцене, в которой этот код и пишется.
fremdizar
Самое прикольное, что и так работает без ошибок...

Код
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.";
}
HaWK
Работает потому, что коду который исполняется внутри функции starMove всё равно к кому привязан обработчик событий ENTER_FRAME к мувиклипу (star_mc) или к сцене.
fremdizar
Цитата(HaWK @ 17.10.2010 - 20:56) *
Это потому что, то положение в коде где пишется addEventListener, это есть "левая часть" для этой функции. Когда эта функция находится внутри своего родителя можно его не писать слева от неё. Здесь подразумевается, что обработчик событий ENTER_FRAME присваивается к главной сцене, в которой этот код и пишется.

Ах, вот оно что... И где "левая часть" заканчивается?

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

Может не к сцене, а к star_mc потому что именно к нему и привязался? Или я ошибаюсь? В принципе если вызывается функция ENTER_FRAME, то значит это применяется к ко всему stage?
HaWK
Событие ENTER_FRAME могут слушать как сцена так и мувики. Зависит от того к кому привяжешь.
fremdizar
Цитата(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;
}
HaWK
Цитата
star_mc.addEventListener (MouseEvent.CLICK, rotateStar);

Вот здесь привязан к star_mc, как ты и сам можешь видеть.

Цитата
addEventListener (Event.ENTER_FRAME, starMove);

А здесь к сцене.
fremdizar
Код
var instrument:MovieClip=banjo;


Цитата
При создании переменой тип данных, которых хранится в переменной, записывается после названия переменной  через двоеточие. Обратите внимание, что тип данных установлен как MoivieClip. Это  значит, что значение instrument всегда будет ссылкой  на MoivieClip.

В этом коде значением по умолчанию устанавливается банджо.


Я здесь не совсем понял:

1. В коде мы создали instrument и назначили его в качестве банджо. Но при чем тут остальные инструменты? Откуда флеш знает что есть остальные инструменты? Может как то они сгруппированы?

2. MovieClip - что это за тип данных?
HaWK
MovieClip - это как бы мини-сцена, в которой может содержаться контент, в мувиклипе присутствует временная шкала с кадрами. Когда ты открываешь флэш там появляется сцена со шкалой, это тоже МувиКлип.

Цитата
1. В коде мы создали instrument и назначили его в качестве банджо. Но при чем тут остальные инструменты? Откуда флеш знает что есть остальные инструменты? Может как то они сгруппированы?

Не понял
fremdizar
Цитата(HaWK @ 19.10.2010 - 12:46) *
Не понял

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

ОК!

В сцене несколько инструментов.



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

Код
var instrument:MovieClip=banjo;


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

Именно! Я только сейчас заметил

Код
instrument=glock;


В каждой функции это прописано.

Спасибо тебе!!!
HaWK
Пожалуйста.
fremdizar
Пока пытаюсь анимировать плавные переходы возник вопрос:

Код
import fl.transitions.Tween;


Подгружает ли Флеш какие нибудь файлы в ролик? Влияет ли импорт классов, как в этом коде, на размер ролика? Кто-нибудь тестил?
fremdizar
Относительно группировки, я видоизменил код так:

Код
star_mc.addEventListener (MouseEvent.CLICK, rotateStar);
function rotateStar (e:MouseEvent):void
{
    star_mc.rotation += 5;
        instrument=star_mc;
}


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

После теста этого кода, я вспомнил про репортаж с афганской деревни, показанный очень давно по новостям. Там сельчане сидели и тупо смотрели на горящую лампочку, когда только провели им электричество... smile.gif Так и со мной... сижу и поражаюсь...

Флеш - это сказка!!!
HaWK
Да, fremdizar, тебя много ещё открытий ждёт smile.gif
Попробуй ещё вот так:

var tweenfadeOut:Tween = new Tween(instrument, "alpha", Elastic.easeInOut, 1, 0, 3, true)
fremdizar
Цитата(HaWK @ 19.10.2010 - 13:39) *
Да, fremdizar, тебя много ещё открытий ждёт smile.gif
Попробуй ещё вот так:

var tweenfadeOut:Tween = new Tween(instrument, "alpha", Elastic.easeInOut, 1, 0, 3, true)

Слов нет.... smile.gif СУПЕР!
HaWK
Да, с Tween-ом можно себя развлечь smile.gif
fremdizar
Вместо этого:

Код
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?
HaWK
Сделать два твина:
Код
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
Цитата(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
Немного видоизменил и сам в шоке от увиденного... Лепота...

Код
    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);
    }
HaWK
Ну, в роде всё правильно, мувик будет двигаться пока не достигнет границы сцены.
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
При импорте классов в сцену, размер файла увеличивается? rolleyes.gif
HaWK
Да, увеличивается. Только без импорта не обойтись. Классы надо импортировать, чтобы их использовать.
fremdizar
Код
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 идет? Если так, то есть список всех свойств классов где-нибудь? Их надо учить наизусть?

Да и вообще, зачем импортировать класс, а потом переименовывать если название класса уже самом по себе служебное слово? Неужели трудно было сделать так, в случае если создается новый класс с зарезервированным служебным названием встроенного во Флеш класса, то он автоматом импортируется... Или я такой лентяй пару строк лень написать? smile.gif
Русская версия IP.Board © 2001-2013 IPS, Inc.