|
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
40. Событие Render
В AS3 добавлено новое событие Event.RENDER (flash.events.Event.RENDER), которое рассылается после enterFrame, но перед тем, как экран флеш-плеера обновится. Это событие не генерится автоматически, его нужно активировать самостоятельно, вызвав метод stage.invalidate(); (flash.display.Stage.invalidate()), после чего, перед обновлением экрана все объекты приаттаченные на stage (и только они) получат событие Event.RENDER. Если флэш плеер не занимается рендерингом (например окно минимизировано в таск бар), то Event.RENDER не рассылается.
Пример: var sprite:Sprite = new Sprite(); stage.addChild(sprite); sprite.addEventListener(Event.ENTER_FRAME, enterFrame); sprite.addEventListener(Event.RENDER, render); stage.addEventListener(MouseEvent.CLICK, click); function enterFrame(event:Event):void { trace("enter frame"); } function render(event:Event):void { trace("render"); } function click(event:MouseEvent):void { trace("click"); stage.invalidate(); } Последний раз редактировалось MerlinTwi; 20.10.2006 в 11:24. |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
47. Картинки из библиотеки (library)
Еще во Flash 8 была добавлена возможность загрузить картинку из библиотеки (library) используя linkage ID и метод BitmapData.loadBitmap(). В ActionScript 3 это делается несколько иначе, т.к. все мувиклипы, фреймы и объекты в библиотеке ассоциированы с классами. Классы для картинок в библиотеке являются потомками BitmapData ( flash.display.BitmapData) и перед добавлением картинки к какому-либо визуальному объекту нужно ее связать с классом Bitmap (flash.display.Bitmap), поскольку непосредственно BitmapData приаттачить нельзя.
В качестве примера, добавьте в библиотеку картинку, в диалоге linkage поставьте галочку «Export for ActionScript» и укажите название класса «RomeImage» (этот класс будет сгенерирован автоматически при публикации SWF). Далее нужно написать код для добавления этой картинки на экран: |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
48. Изменения в typeof
Оператор typeof позволяет узнать базовый тип любого объекта/переменной. Это не информация о классе, а просто тип переменной связанной с объектом. Для детальной информации о классе следует использовать instanceof, getQualifiedClassName, describeType.
В ActionScript 1 и 2, typeof возвращал такие значения:
// AS1 & AS2 trace(typeof new XML()); // object trace(typeof my_mc); // movieclip trace(typeof null); // null trace(typeof true); // boolean trace(typeof 1); // number trace(typeof ""); // string trace(typeof new Boolean()); // object trace(typeof new Number()); // object trace(typeof new String()); // object // AS3 trace(typeof new XML()); // xml trace(typeof my_mc); // object trace(typeof null); // object trace(typeof true); // boolean trace(typeof 1); // number trace(typeof ""); // string trace(typeof new Boolean()); // boolean trace(typeof new Number()); // number trace(typeof new String()); // string trace(typeof int(1)); // number trace(typeof uint(1)); // number |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
49. getBounds() и getRect()
Как и в ActionScript 1 и 2, в ActionScript 3 есть метод getBounds() (flash.display.DisplayObject.getBounds()), который вычисляет границу мувиклипа в системе координат любого объекта на timeline. Но в ActionScript 3 метод getBounds возвращает Rectangle (flash.geom.Rectangle) вместо Object со свойствами xMin, xMax, yMin, yMax, как это было раньше.
В ActionScript 3 еще добавлен новый метод getRect() (flash.display.DisplayObject.getRect()), который выполняет аналогичную задачу, но в отличие от getBounds не учитывает толщину линий (strokes on shapes). В качестве наглядного примера, красный прямоугольник высчитывается по getBounds, а синий по getRect: var sprite:Sprite = new Sprite(); sprite.graphics.beginFill(0x999999); sprite.graphics.lineStyle(10, 0x333); sprite.graphics.drawCircle(100, 100, 50); sprite.graphics.endFill(); addChild(sprite); addChild(createRectShape(sprite.getRect(this), 0x0000FF)); addChild(createRectShape(sprite.getBounds(this), 0xFF0000)); function createRectShape(rect:Rectangle, color:uint):Shape { var rectShape:Shape = new Shape(); rectShape.graphics.lineStyle(0, color); rectShape.graphics.drawRect(rect.left, rect.top, rect.width, rect.height); return rectShape; } |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
50. Разница между for..in и for each..in
В ActionScript 3 добавлен новый вид цикла for each..in который работает аналогично прежнему for..in, но перебираются значения объекта, а не ключи. Пример:
var object:Object = new Object(); object.name = "senocular"; object.id = 2867; object.isModerator = true; for each (var value:* in object){ trace(value); } /* Output: true 2867 senocular */ // А прежний for..in: for (var key:String in object){ trace(key + ": " + object[key]); // object[key] is value } /* Output: isModerator: true id: 2867 name: senocular */ Так же обратите внимание, что ActionScript 3 в циклах (for..in и for each..in) сохраняет порядок элементов в массиве, а ActionScript 1 и 2 перебирал в порядке обратном добавлению элементов. См. пример: var array:Array = new Array(); array[1] = 1; array[0] = 2; array[2] = 3; for (var key:String in array){ trace("array[" + key + "] = "+ array[key]); } Output AS 3: |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
51. Значения по умолчанию для параметров функции
ActionSript 3 дает возможность присвоить значения по умолчанию для параметров функций. Такие параметры становятся необязательными при вызове функции.
function method(required:String, optional:String = "default"):void { trace(required +" "+optional); } method("Hello"); // "Hello default" |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
52. Неопределенное количество аргументов
Для того, чтобы в ActionSript 3 функция могла принимать любое количество аргументов необходимо использовать специальный параметр три точки
«... название_переменной» (Keyword: ...(rest)), который всегда располагается последним, после перечисления обязательных аргументов. Переданные аргументы записываются в указанную переменную в виде массива: Последний раз редактировалось MerlinTwi; 18.10.2006 в 13:23. |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
53. arguments
В ActionScript 3, как и в ActionScript 1 и 2, любая функция содержит arguments (Top level arguments), куда в виде массива записываются все переданные аргументы. Но в ActionScript 3 убрали свойство arguments.caller, для получения ссылки на вызвавшую функцию советуют передавать эту ссылку самостоятельно в виде аргумента функции.
|
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
54. Поддержка пространства имен (Namespaces)
ActionScript 3 поддерживает пространство имен (namespaces) в классах по аналогии с namespaces в XML. Пространство имен можно сравнить с пакетами (packages), поскольку пакеты позволяют создать несколько различных классов с одинаковым названием, но описанных в разных пакетах, так и пространство имен дает возможность определить несколько разных методов и свойств с одним названием внутри одного класса.
Для использования пространства имен необходимо этому пространству присвоить уникальное название с помощью ключевого слова namespace (namespace Keyword). После объявления пространства имен его название можно использовать аналогично public, private… Пример: package { public class UsingNameSpaces { public namespace company; public namespace individual; company var value:int = 10; individual var value:int = 2; public function UsingNameSpaces(){ } company function showValue() { } individual function showValue() { } } } При объявлении пространства имен можно дополнительно указать URI. package { public class UsingNameSpaces { public namespace company = "http://www.example.com/company"; public namespace individual = "http://www.example.com/individual"; company var value:int = 10; individual var value:int = 2; public function UsingNameSpaces(){ } company function showValue() { } individual function showValue() { } } } |
|
|||||
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
55. Оператор (::) для уточнения пространства имен
При вызове метода класса, или обращении к свойству, описанному внутри пространства имен, необходимо уточнить из какого именно пространства имен нужно вызвать метод. Один из способов сделать это - использовать оператор :: (name qualifier operator). Указываете название пространства имен, два двоеточия и название метода (namespace::member).
package { public class UsingNameSpaces { public namespace company = "http://www.example.com/company"; public namespace individual = "http://www.example.com/individual"; company var value:int = 10; individual var value:int = 2; public function UsingNameSpaces(){ company::showValue(); // traces 10 individual::showValue(); // traces 2 } company function showValue() { trace(company::value); } individual function showValue() { trace(individual::value); } } } |
Часовой пояс GMT +4, время: 20:47. |
|
« Предыдущая тема | Следующая тема » |
|
|