Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0 > Статьи

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.11.2006, 12:51
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 101  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 95. Flash 9: Strict Mode

Во Flash 9 добавлен новый пункт настройки ActionScript 3, называется "strict mode" (расположен: Edit > Preferences > ActionScript > ActionScript 3.0 settings... > Strict mode). Если strict mode включен, то компилятор более строго проверяет код, особенно соответствие типов, и не создает SWF даже при незначительных ошибках. К примеру, свойство "constructor" класса Object не определено в самом классе, а только в прототипе. Поэтому, если попытаться обратиться к этому свойству в не динамическом классе в strict mode, компилятор выдаст ошибку. Пробуем:
Код:
var mySprite:Sprite = new Sprite();
trace(mySprite.constructor);
Компиляция:
Код:
**Error** Scene 1, Layer 'Layer 1', Frame 1 : Line 2, Column 16 : [Compiler] Error #1119: Access of possibly undefined property constructor through a reference with static type flash.display:Sprite.
trace(mySprite.constructor);
ReferenceError: Error #1065: Variable Timeline0_9f132e9d986cc749b16415211316a5f0 is not defined.
В данном случае стоит сделать приведение типа к Object, который является динамическим, поэтому ошибки не будет:
Код:
var mySprite:Sprite = new Sprite();
trace(Object(mySprite).constructor); // [class Sprite]
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 09.11.2006, 12:55
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 102  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 96. System.totalMemory

В классе System (flash.system.System) есть новое интересное свойство totalMemory (flash.system.System.totalMemory), которое показывает сколько байт памяти использует Flash-плеер в данный момент. Например:
Код:
var o:Object = new Object();
trace(System.totalMemory); // 4960256
Или более «объемный» класс:
Код:
var o:MovieClip = new MovieClip();
trace(System.totalMemory); // 4964352
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 09.11.2006, 21:17
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 103  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 64. XML и XMLList

Работая с XML в ActionScript 3 вы в основном имеете дело с двумя объектами: XML (Top level XML) и XMLList (Top level XMLList). Существенная разница между ними в том, что XML – это один элемент XML-дерева, например узел (который может содержать произвольное количество вложенных узлов), а XMLList массив элементов (1 или более).
Код:
// XML:
<foo>
	<foo />
	<foo />
	<foo />
</foo>
Код:
// XMLList:
<foo />
<foo />
<foo />
В первом примере есть один корневой узел и это будет представлено как XML объект. Во втором примере список узлов, это уже будет XMLList.
В отличие от старого XML объекта из предыдущих версий ActionScript (который теперь XMLDocument), новые XML и XMLList могут представлять из себя не только узлы XML дерева (nodes), но и другие значения, например атрибуты:
Код:
var myXML:XML = <foo>
    <foo bar="bar1" />
    <foo bar="bar2" />
    <foo bar="bar3" />
</foo>;

trace(myXML.foo.@bar.toXMLString());
/* Output:
bar1
bar2
bar3
*/
trace(myXML.foo.@bar is XMLList); // true
Заметьте, что атрибуты всегда возвращаются как XMLList, даже если в итоге получается только один атрибут:
Код:
trace(myXML.foo[0].@bar is XMLList); // true
Для того чтобы получить XML объект, нужно из возвращаемого массива взять первый элемент:
Код:
trace(myXML.foo[0].@bar[0] is XML); // true
Аналогичная ситуация и с вложенными узлами XML:
Код:
var myXML:XML = <foo>
    <foo />
</foo>;
trace(myXML.foo is XMLList); // true
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 09.11.2006, 21:35
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 104  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 98. Класс Timer

В ActionScript 3 введен новый класс Timer (flash.utils.Timer), который заменяет устаревшую функцию setInterval (flash.utils.setInterval()), хоть setInterval пока и оставлена, использовать ее не рекомендуется. В отличие от setInterval класс Timer рассылает события (flash.events.TimerEvent), а значит на один таймер можно навесить сколько угодно обработчиков. Кроме того, Timer дает возможность контролировать сколько раз должен сработать таймер.
Пример:
Код:
var timer:Timer = new Timer(500, 10);

timer.addEventListener(TimerEvent.TIMER, notifier);
timer.addEventListener(TimerEvent.TIMER, stopper);
stage.addEventListener(MouseEvent.CLICK, continuer);

function notifier(event:TimerEvent):void {
    trace(timer.currentCount);
}
function stopper(event:TimerEvent):void {
    switch (timer.currentCount) {
        case 5:
            timer.stop();
            break;
        case timer.repeatCount:
            timer.reset();
            break;
    }
}
function continuer(event:MouseEvent):void {
    timer.start();
}

timer.start();
Здесь timer 10 раз подряд посылает событие TimerEvent.TIMER каждые 500 миллисекунд. На событие добавлены два обработчика, один выводит номер текущей итерации, другими словами, сколько раз уже сработал таймер (свойство currentCount), а другой останавливает таймер после 5-го срабатывания (метод stop), или сбрасывает счетчик итераций (метод reset), когда количество итераций достигает максимально заданного (свойство repeatCount). Кликом мышки по сцене можно заново запустить остановленный таймер (метод start).
Результат выполнения:
Код:
1
2
3
4
5
(пауза; клик для продолжения)
6
7
8
9
10
(пауза; клик для продолжения)
1
2
3
4
5
...
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 09.11.2006, 22:10
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 105  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 99. Взаимодействие между AVM2 (AS3) и AVM1 (AS2/AS1) через LocalConnection

Код ActionScript выполняется во flash-плеере в специальной «виртуальной машине», для ActionScript 1 и 2 это была AVM1, для ActionScript 3 была разработана новая AVM2. Нет возможности напрямую взаимодействовать между программами выполняющимся в разных виртуальных машинах, поскольку они несовместимы. К примеру, если в мувик созданный на ActionScript 3 загрузить внешний мувик из ActionScript 1 или 2, то не удастся напрямую управлять им: запустить, остановить, вызвать функцию, считать значение свойства и т.п.
Но можно создать специальный канал для взаимодействия при помощи LocalConnection, используя:Пример:
Код:
// файл на ActionScript 2: AS2animation.fla
// на timeline размещен один мувиклип названный animation_mc

//Устанавливаем  local connection для получения команд извне
var AVM_lc:LocalConnection = new LocalConnection();

// обработчик события stopAnimation
AVM_lc.stopAnimation = function(){
    animation_mc.stop();
}

// слушаем события по каналу  "AVM2toAVM1"
AVM_lc.connect("AVM2toAVM1");
Код:
// Файл на ActionScript 3: AS3Loader.fla

// local connection для взаимодействия с мувиклипом в AVM1
var AVM_lc:LocalConnection = new LocalConnection();

// загружаем внешнюю SWF AVM1
var loader:Loader = new Loader();
loader.load(new URLRequest("AS2animation.swf"));
addChild(loader);

// при клике мышкой по загруженному мувиклипу вызывается stopPlayback
loader.addEventListener(MouseEvent.CLICK, stopPlayback);

function stopPlayback(event:MouseEvent):void {
    // вызывается stopAnimation по каналу "AVM2toAVM1"
    AVM_lc.send("AVM2toAVM1", "stopAnimation");
}
Здесь AS3-мувик подгружает к себе AS2-мувик и размещает на сцене. Когда AS2-мувик подгружен и проигрывается пользователь может кликнуть по нему для прекращения проигрывания, при этом вызывается stopPlayback, который отсылает событие "stopAnimation" по local connection каналу "AVM2toAVM1". AS2-мувик получает событие и вызывается обработчик stopAnimation, который приказывает мувиклипу animation_mc остановиться.
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 09.11.2006, 22:36
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 106  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
По умолчанию 100. Класс ByteArray

В ActionScript 3 добавлена возможность работать с бинарными данными, используя класс ByteArray (flash.utils.ByteArray). Класс ByteArray наследуется от массива Array (Top level Array) и может содержать в себе байты любой бинарной информации, аналогично тому, как она размещена в памяти компьютера. Работать с классом довольно просто, поэтому лучше посмотреть примеры, что можно с его помощью сделать:
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 09.11.2006, 23:42
MerlinTwi вне форума Посмотреть профиль Отправить личное сообщение для MerlinTwi Посетить домашнюю страницу MerlinTwi Найти все сообщения от MerlinTwi
  № 107  
Ответить с цитированием
MerlinTwi
 
Аватар для MerlinTwi

Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
В аттаче все советы в html формате (можно добавить на свой сайт)
Вложения
Тип файла: rar tips.rar (50.2 Кб, 5318 просмотров)
__________________
Создатель: Бойцовский клуб | TimeZero | Sky2Fly
Я возьму сам.

Старый 11.12.2007, 17:31
Evgeniya вне форума Посмотреть профиль Отправить личное сообщение для Evgeniya Найти все сообщения от Evgeniya
  № 108  
Ответить с цитированием
Evgeniya

Регистрация: Dec 2007
Сообщений: 2
Подскажите, пожалуйста, как временно запомнить только что нарисованную картинку для последующего ее изменения в movie clip (например, заставить вращаться)

Старый 03.02.2008, 22:17
Флэш Потрошитель вне форума Посмотреть профиль Отправить личное сообщение для Флэш Потрошитель Посетить домашнюю страницу Флэш Потрошитель Найти все сообщения от Флэш Потрошитель
  № 109  
Ответить с цитированием
Флэш Потрошитель
 
Аватар для Флэш Потрошитель

Регистрация: Sep 2002
Адрес: Харьков
Сообщений: 27
Отправить сообщение для Флэш Потрошитель с помощью ICQ
Я вот думаю — а что, если весь материал загнать в один файл (PDF?), чтобы печатать хорошо было?
__________________
//Фотрошитель

Старый 04.02.2008, 00:25
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 110  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от Флэш Потрошитель
Я вот думаю — а что, если весь материал загнать в один файл (PDF?), чтобы печатать хорошо было?
Отличная идея. У меня все никак руки не дотягиваются положить все статьи в блог, да и особого смысла не вижу.
А pdf-кой, я думаю, будет очень неплохо.

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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