Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   AS3 - начало. (http://www.flasher.ru/forum/showthread.php?t=99434)

Alexsas 06.08.2007 13:15

AS3 - начало.
 
Добрый всем день.
Сильно уж очень хочу AS3 изучать.. книг естественно еще по этому делу нету. Вообще-то я ко Flex тяготею, но почитав форум, стало ясно что вся сила Flex в As3. Да к тому же уже как то с тэгами этими всеми разобрался..

Но вот AS3 это засада... все только и твердят что стало легче программировать... но я пока в полном ацтое.. Помогите мне.

Я уже перелопатил все форумы и блоги, и help.. уже понял что все пишется классами, что кадры уже трогать не надо.. уже вроде как понял и слушателей этих.. да и по примерам в хелпе все вроде как понятно.. но. как что пытаюсь сам написать так все.. попа..

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

Имею вот такой вопросы.
1) Чем отличается класс который присоединяется ко всему документу от класса который аттачиться к любому мувику?
2) Можно ли все тело программы написать в главном классе? или же всегда необходимо к каждому мувику подключать класс для того что бы с ним что-то произошло?
3) У меня есть общее представление как все работает, но вот АЗОВ НАЧАЛА так сказать нету.. посоветуйте чего нибудь...

etc 06.08.2007 13:20

1) Тем, что это разные классы сами по себе, но наследуются от InteractiveObject;
2) Можно, но не стоит. Классы для того и придумали, чтобы разделять обязанности;
3) Вообще говоря перечисленных способов получения знаний должно было хватить. Конкретные вопросы можно задавать здесь.

Alexsas 06.08.2007 13:24

4) в чем разница: добавление компонента через редактор или же посредством написания кода?

etc 06.08.2007 13:28

А как вы его собираетесь добавить написанием кода? Откуда в библиотеке возьмуться классы для компонента и его визуальные части?

Alexsas 06.08.2007 13:36

Лучшее обучение это решение конкретных задач.
Для примера:

Имею в библиотеке два мувика: myPlates, и myCur.
Смысл задачи чтобы разместить на основном поле две копии myPlates, и чтобы при наведении на каждую из копий вид курсора менялся на myCur.

Я допустим сейчас даже незнаю какие классы на какие мувики вешать..
И какие библиоткеи классов импортировать.. но я попробую..

import.flash.events
import.flash.MovieClip

все? или нет.. разъясните пожалуйста

etc 06.08.2007 13:41

А можно исходник? А то лень собирать :)

Alexsas 06.08.2007 13:45

Вложений: 1
вот оно

etc 06.08.2007 13:59

Вложений: 1
Собственно, вот. Вопросы по реализации — велкам.

Alexsas 06.08.2007 14:32

давайте я попробую все расписать а вы меня поправите если что.
Код:

package {
// загружаем библиотеки того чего нам портебуется
        import flash.display.Sprite; // это для того чтобы задавать новые экземпляры нащих мувиков
        import flash.events.Event; // это для того чтобы были у нас события
        import flash.events.MouseEvent; // ну а это собственно мышыные события.
        import flash.ui.Mouse; // 1. что это??? (догодака.. библиотке отвечающая за мышиные поведения в интерфейсе)
       
        public class Example extends Sprite { //собственно наш класс...
               
                private var _cursor:MyCursor; //обявляем наш курсор курсором??
               
                public function Example() { // тело класса
                        super(); // что это?? обьясните
                        var place0:MyPlace = new MyPlace(); // обьявляем первый экз. нашего мувика
                        var place1:MyPlace = new MyPlace(); // второй.
                        this._cursor = new MyCursor(); // зачем это строка?
                        this._cursor.visible = false; // невидим курсор
                        this._cursor.mouseEnabled = false; // что это?
                        place1.x = 200; // второй ставим непадалеку...
                        place0.addEventListener(MouseEvent.MOUSE_OVER, this.mouseOverHandler); // мышка над обьектом вызываем функшин.
                        place1.addEventListener(MouseEvent.MOUSE_OVER, this.mouseOverHandler); // тоже самое для 2
                        place0.addEventListener(MouseEvent.MOUSE_OUT, this.mouseOutHandler); // мышка ушла вызывааем другой фуншин.
                        place1.addEventListener(MouseEvent.MOUSE_OUT, this.mouseOutHandler); // double
                        this.addChild(place0); // ну собственно делаем их
                        this.addChild(place1);
                        this.addChild(this._cursor);
                } // вопрос почему здесь везде this  ???
               
                private function mouseOverHandler(event:MouseEvent):void { // функция когда мышка над обьектом
                        Mouse.hide(); // прячем настоящий курсор
                        this._cursor.visible = true; // появляем наш.
                        this.addEventListener(MouseEvent.MOUSE_MOVE, this.mouseMoveHandler); // вот это я незнаю что за действие подозреваю что аналог start drag ????
                }
               
                private function mouseOutHandler(event:MouseEvent):void { // ну тут понятно.
                        Mouse.show();       
                        this._cursor.visible = false;
                        this.removeEventListener(MouseEvent.MOUSE_MOVE, this.mouseMoveHandler); // вот тут непонятно.
                }
               
                private function mouseMoveHandler(event:MouseEvent):void { // а становится понятно в чем штука...
                        this._cursor.x = event.stageX; // вот странная штука непонимаю..
                        this._cursor.y = event.stageY;
                        event.updateAfterEvent(); // ну это аля onEnterFrame ?
                }
        }
}

щас поглядим на другие классы

Код:

package {
       
        import flash.display.Sprite;
       
        public class MyCursor extends Sprite {
                public function MyCursor() {
                        super();
                }
        }
}

зачем это??? вот такие вот вопросы..

Обязательно ли всегда все классы начинать с package ?

etc 06.08.2007 14:42

Код:

package { // объявление пакета класса
        import flash.display.Sprite; // импорт класса Sprite, который мы будем активно использовать.
        import flash.events.Event; // импорт класса Event, который является базовым для всех событий.
        import flash.events.MouseEvent; // мышиный класс-наследник Event
        import flash.ui.Mouse; // с помощью класса Mouse скрываем и показываем курсор мыши
       
        public class Example extends Sprite {
               
                private var _cursor:MyCursor; // объявляем приватную переменную _cursor типа MyCursor. Она будет содержать ссылку на экземпляр MyCursor
               
                public function Example() { // конструктор класса
                        super(); // вызов конструктора супер-класса (в данном случае, Sprite), для Sprite вызов делать необязательно, но в целом так положено
                        var place0:MyPlace = new MyPlace(); // создаем первый экз. нашего мувика
                        var place1:MyPlace = new MyPlace(); // второй.
                        this._cursor = new MyCursor(); // создаем экземпляр MyCursor. Таким образом, мы можем обращаться к this._cursor.
                        this._cursor.visible = false; // делаем его невидимым
                        this._cursor.mouseEnabled = false; // отключаем реакцию курсора на мышиные события
                        place1.x = 200; // второй ставим непадалеку...
                        place0.addEventListener(MouseEvent.MOUSE_OVER, this.mouseOverHandler); // подписываемся на событие MOUSE_OVER первого клипа
                        place1.addEventListener(MouseEvent.MOUSE_OVER, this.mouseOverHandler); // тоже самое для 2
                        place0.addEventListener(MouseEvent.MOUSE_OUT, this.mouseOutHandler); // подписываемся на событие MOUSE_OUT первого клипа
                        place1.addEventListener(MouseEvent.MOUSE_OUT, this.mouseOutHandler); // double
                        this.addChild(place0); // добавляем клипы в display list
                        this.addChild(place1);
                        this.addChild(this._cursor);
                } // вопрос почему здесь везде this  ??? // this — обращение к экземпляру данного класса (Example, то бишь). Можно не писать, но я пишу.
               
                private function mouseOverHandler(event:MouseEvent):void { // обработчик события MOUSE_OVER
                        Mouse.hide(); // прячем настоящий курсор
                        this._cursor.visible = true; // появляем наш.
                        this.addEventListener(MouseEvent.MOUSE_MOVE, this.mouseMoveHandler); // подписка событие MOUSE_MOVE (движение мыши)
                }
               
                private function mouseOutHandler(event:MouseEvent):void { // ну тут понятно.
                        Mouse.show();       
                        this._cursor.visible = false;
                        this.removeEventListener(MouseEvent.MOUSE_MOVE, this.mouseMoveHandler); // отписываемся от события MOUSE_MOVE (чтобы не гонять невидимый курсор без дела
                }
               
                private function mouseMoveHandler(event:MouseEvent):void { // обработчик движения мыши
                        this._cursor.x = event.stageX; // присваиваем собственному курсору глобальную координату настоящего курсора мыши
                        this._cursor.y = event.stageY;
                        event.updateAfterEvent(); // принудительная перерисовка экрана, потому как объект переместился, а следующий кадр ещё не был отрисован
                }
        }
}

Классы MyCursor, MyPlace можно было не создавать, попросив сделать это сам Flash CS3, т.е. сгенерировать автоматически. Но если нам понадобится какой-то дополнительный функционал, придется их писать.


Часовой пояс GMT +4, время: 02:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.