Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ActionScript 3.0 и Слои (Layers) (http://www.flasher.ru/forum/showthread.php?t=202812)

Fogflasher 12.08.2013 15:37

ActionScript 3.0 и Слои (Layers)
 
Правильно ли я понимаю, что в экшнскрипт никто не работает со слоями?
То есть, слоёв не существуют для этого языка: нет ни свойств, ни методов, ни классов тождественных им.

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

А если слоёный мувик имеет объекты, и его разбивать нельзя, то надо просто присвоить этим объектам классы и обращаться к ним непосредственно, опять же, игнорируя слоёность.

Tails 12.08.2013 15:51

Слои - удобный интсрумент для определения иерархий отображения. В конечном счёте, все отображаемые объекты оказываються в общем списке отображения родительского объекта.
http://help.adobe.com/ru_RU/FlashPla...Container.html

AlexLucas 12.08.2013 15:54

Слои есть только во Flash IDE, в as3 у каждого элемента разве что есть свой z-индекс. Но можно написать и свою реализацию слоёв в своём же приложении.
Цитата:

то надо просто присвоить этим объектам классы имена
Если внутри мувика mc1 есть мувик mc2, то обращаться к нему надо будет так
Код AS3:

mc1.mc2

, при условии что mc1 и mc2 это имена (instance name) этих мувиков. Если вы это имели в виду под "слоёностью".
Если во втором параграфе есть вопрос, я его не понял.

Fogflasher 12.08.2013 16:11

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

AlexLucas, Не совсем понимаю, почему вы зачеркнули слово классы.
Ведь если например я создал в библиотеке мувиклип Tw1, и пролинковал его к классу, то я могу управлять им как-то так:
Код AS3:

private var tw1:Tw1;
tw1 = new Tw1();
tw1.x = 100;
tw1.y = 100;
addChild(tw1);

В данном случае я же именно имя класса присвоил объекту, а не имя...
Если вы имеете ввиду имя инстанции. Но имя инстанции это, насколько я понимаю, либо:
1. вот это: private var tw1:Tw1;
2. либо вручную указанное для мувиклипа <Instance Name>.
Но это одно и тоже, разницы же нет, вроде. (Впрочем, возможно мы говорим об одном и том же).

Цитата:

Если вы это имели в виду под "слоёностью".
Если во втором параграфе есть вопрос, я его не понял.
Ну имелось ввиду, что есть например 6 слоев (layers) и на каждом свой мувиклип.
Выходит, обращение к каждому, обычное, никак не связанное с фактом что он на каком-то слое.

P.S. За хинт с вложенностью мувиков спасибо что напомнили, я еще не экспериментировал с доступом к различным вариациями этого плана.

belv 12.08.2013 16:19

Понятия layers в AS3 нет, есть понятие глубина .Для управления глубиной есть несколько методов, например addChild добавляет визуальный объект с самым высоким индексом глубины.Смотрите методы DisplayObjectContainer.

AlexLucas 12.08.2013 16:46

Цитата:

Если вы имеете ввиду имя инстанции. Но имя инстанции это, насколько я понимаю, либо:
1. вот это: private var tw1:Tw1;
2. либо вручную указанное для мувиклипа <Instance Name>.
Две разные вещи.
1) это ссылка на объект (может быть сколько угодно штук)
Код AS3:

private var objectLink:Object = {name:'myObject', x:0, y:0 ....} //objectLink это ссылка
private var objectLinkTwo:Object = objectLink; //ещё одна ссылка на тот же обжект созданный выше

2) это имя объекта (свойство name - оно одно такое у объекта)

Создавать на каждый объект по классу это не правильно. Класс это как шаблон по которому создаются объекты. Вы же не будете для каждой кнопки создавать по классу. Есть класс - Button (есть и другие естественно), и уже пользуясь им вы создаёте экземпляры кнопок.
У меня не установлен флеш IDE сейчас, точно не могу сказать что там и как с библиотекой, не помню.

Да, слои только в IDE.

SvetozarPNZ 12.08.2013 17:38

На мой взгляд термин layer относится к визуальному дизайну, а не к программированию. Вы пишете
Цитата:

в экшнскрипт никто не работает со слоями?
Словно AS 3 какой-то ограниченный. У него есть средства для работы с z-последовательностью объектов, что аналогично модели слоев.

Например, если создать в среде Flash два слоя; в одном нарисовать мувиклип с именем layer1, в другом - мувиклипы с именами layer2_1 и layer2_2; затем в коде написать команды

Код AS3:

trace(getChildIndex(layer1));
trace(getChildIndex(layer2_1));
trace(getChildIndex(layer2_2));

то можно увидеть z-индексы объектов. Это слои в понимании языка AS, а не в визуальном представлении дизайнерской среды.

Fogflasher 12.08.2013 17:40

Tails, AlexLucas, belv, SvetozarPNZ, по слоям в целом понятно, благодарю за разъяснения.

Цитата:

Создавать на каждый объект по классу это не правильно.
Странно. Ну вот например есть три созданные вручную мувиклипа: звезда, эллипс, квадрат.
Причем их на стэйдже нет, они только в библиотеке.

Как же тогда быть, если не создавать класс для каждого?
Или может быть прописать им всем некий общий класс: Shape1, и... как-тогда обращаться к каждому экземпляру?
Имен инстанций у нас еще нет, и как отличить звезду от эллипса, юзая только Shape1 - непонятно.

Можно, конешно вручную помесить все три на стэйдж, вручную же прописать им <Instance name>, но...
Что-то здесь не так, наверняка можно как-то проще и чисто кодом всё разрулить.

belv 12.08.2013 18:25

В библиотеке нажимаете правой кнопкой мыши на символ, выбираете popeties.В свойствах ставите галочку Export for ActionScript, в поле Class пишите имя класса Star и жмете ok.
После чего в коде Вы уже можете создавать их экземпляры и добавлять на сцену.
Код AS3:

var star = new Star();
addChild(star);
var elipse = new Elipse();
addChildAt(elipse,0);

Так вот элипс будет под звездой.

Котейка 12.08.2013 18:38

Fogflasher, вы уж определитесь где они лежат :) Вы до этого сказали что объекты в мувике
Цитата:

А если слоёный мувик имеет объекты, и его разбивать нельзя, то надо просто присвоить этим объектам классы и обращаться к ним непосредственно, опять же, игнорируя слоёность.
На что и получили ответ
Цитата:

надо просто присвоить этим объектам имена
Потом говорите что они не в мувике, а в библиотеке. Это все-таки разные вещи :)
Если есть в библиотеке некий мувик, а в него вложены другие, то при создании экземпляра этого мувика вы сможете к ним обращаться внутри клипа так же как, если бы он изначально лежал на сцене.
Имелось ввиду, что нет смысла создавать свой класс, для каждого объекта внутри мувика экземпляр которого не будет создаваться в коде отдельно и существовать как самостоятельный объект.

expl 13.08.2013 01:02

Цитата:

Правильно ли я понимаю, что в экшнскрипт никто не работает со слоями?
То есть, слоёв не существуют для этого языка: нет ни свойств, ни методов, ни классов тождественных им.
Слои, которые вы видите во FlashIDE не существуют в момент воспроизведения. Остаются только объекты, которые как-бы на них лежали.

Нет никакой ложки

Fogflasher 13.08.2013 09:48

Цитата:

Сообщение от belv (Сообщение 1143573)
В библиотеке нажимаете правой кнопкой мыши на символ, выбираете popeties.В свойствах ставите галочку Export for ActionScript, в поле Class пишите имя класса Star и жмете ok.

Ну вот, и получается, что для каждого символа в библиотеке нужно создавать свой класс (для описанного случая).

Цитата:

Сообщение от Котейка (Сообщение 1143575)
Fogflasher, вы уж определитесь где они лежат :) Вы до этого сказали что объекты в мувике

Нет нет, в данной теме я не рассматриваю какой-то конкретный свой пример! Это абстрактный вопрос был.
Просто AlexLucas сказал, что не обязательно для каждого объекта свой класс создавать. Мне это показалось непонятным.

А если он имел ввиду, именно то как вы это поняли:

Цитата:

Имелось ввиду, что нет смысла создавать свой класс, для каждого объекта внутри мувика экземпляр которого не будет создаваться в коде отдельно и существовать как самостоятельный объект.
Тогда вопросов нет, проще конешно обращаться к "дочерним" (или как это правильно называется) объектам через родителя, не плодя классы для них.

Добавлено через 3 минуты
Цитата:

Сообщение от expl (Сообщение 1143601)
Нет никакой ложки

Ясно Морфеус : )
Иными словами - слои заменяются индексами объектов, получается так.


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

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