![]() |
|
||||||||||
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
В 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
|
Еще во 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
|
Оператор 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
|
Как и в 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
|
В 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
|
ActionSript 3 дает возможность присвоить значения по умолчанию для параметров функций. Такие параметры становятся необязательными при вызове функции.
function method(required:String, optional:String = "default"):void {
trace(required +" "+optional);
}
method("Hello"); // "Hello default"
|
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
Для того, чтобы в ActionSript 3 функция могла принимать любое количество аргументов необходимо использовать специальный параметр три точки
«... название_переменной» (Keyword: ...(rest)), который всегда располагается последним, после перечисления обязательных аргументов. Переданные аргументы записываются в указанную переменную в виде массива: Последний раз редактировалось MerlinTwi; 18.10.2006 в 13:23. |
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
В ActionScript 3, как и в ActionScript 1 и 2, любая функция содержит arguments (Top level arguments), куда в виде массива записываются все переданные аргументы. Но в ActionScript 3 убрали свойство arguments.caller, для получения ссылки на вызвавшую функцию советуют передавать эту ссылку самостоятельно в виде аргумента функции.
|
|
|||||
|
Регистрация: Oct 2003
Адрес: Москва
Сообщений: 328
|
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
|
При вызове метода класса, или обращении к свойству, описанному внутри пространства имен, необходимо уточнить из какого именно пространства имен нужно вызвать метод. Один из способов сделать это - использовать оператор :: (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, время: 14:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|