Просмотр полной версии : Есть вопрос об объектах муви клип
Есть вопрос об объектах муви клип. В самой программе флеш cs5 есть опция создать комплексный объект, в котором хранятся несколько муви клип. И есть возможность обращаться к каждому из них отдельно, с помощью того, что мы выставляем наш большой объект на таймлайн и с помощью экшенс вставляем код в любой из этих мини- объектов. Теперь вопрос, можно ли импотировать такой комплексированный муви-клип (например во флеш-билдер) и обращаться к его мини-объектам. Как это возможно?
Добавлено через 49 минут
Сделала во флеш муви кли, состоящий из многих простоых муви клипов. Часть из них кнопки и т.д. на которые надо реагировать. Было влом раставлять все объекты по одному с помощью кода. Просто сгрупировать всё как один объект и выставить на экран. Нашла решение.
table=new Table();
table.x=115;
table.y=100;
sprite.addChild(table);
var ok:Ok=(Ok)(table.getChildAt(4));
var plus:Plus=(Plus)(table.getChildAt(2));
var minus:Minus=(Minus)(table.getChildAt(3));
var txt:Speed_text=(Speed_text)(table.getChildAt(5));
А что такое "комплексный объект"?
HardCoder
13.03.2012, 21:47
А что это такое?var ok:Ok=(Ok)(table.getChildAt(4));
Добавлено через 1 минуту
Приведение типа?
Похоже на приведение с намеком на сишный стиль) хотя почему бы и нет, так тоже будет работать.
Строила графику во флеш профешнл. Создала объект типа муви клип (у меня это таблица) со многими кнопками на ней. Вместо того, чтобы вручную выставлять каждый муви клип на сцену, можно импортировать со флеш профешнл весь этот стол (со всеми кнопками), на котором уже всё раставлено. И потом пользоватся getChildAt, обращаясь к каждому компоненту отдельно.
Добавлено через 1 минуту
Что такое привидение?? Вы о чём?
А можно задать InstanceName и обращаться по имени соответствующего экземпляра класса
ok=(Ok)(table.getChildByName("ok"));
Вы это имеете ввиду? Можно и так, но это менее эффективно.
Нет, я имел ввиду задать имена объектам, которые потом поименно отборажаются, как поля класса. А приведенный вами участок кода во флеше выглядит странно как минимум
var ok:Ok = table.ok;а
Это понятно. Это когда есть класс, но имени Table, и в нём в одном из полеё объект Ok.
Но не в этом суть. Идея заключалась в том, чтобы расставить весь Table со всеми кнопками (Ok и т.д.) в удобном графическом интерфейсе (флеш cs5). Сохранить всё готовое в библиотеке, и импортировать этот муви клип (Table), так чтобы, когда его выставляем в коде sprite.addChild(table);
всё компоненты Table выставлялись в нужных местах на экране. (а не вручную подгонять каждый компонент Table).
Ну так они и выставятся, в чем проблема-то?
Я тоже так думала. Это было логично, пока не попробовала ). После Table. не выдаёт таких вариантов, и код также не срабатывает.
HardCoder
13.03.2012, 22:42
Я, лично, не пойму: в чем проблема была изначально? И каким способом вы эту проблему решили?
Ну, нарисовали мы во флеше спрайт. В нем нарисовали другие мувиклипы. Импортировали этот главный спрайт в АС, назвали класс Table. Потом кодом создали этот спрайт. В нем делаем все что захотим со вложенными в него мувиками... Ни проблема ни ее решение непонятны...
Проблема была в том, что не знала, как обращаться к мувикам, внутри этого спрайта Table. Пока не нашла способ table.getChildAt Дело в том, что я экпортирую этот Table как муви клип. На тот момент не понимала, что любой класс муви клип расширяет класс спрайт. На всякий случай спрашиваю- это так и есть? (Пойду почитаю в гугле). Начала изучать флеш всего 3 дня назад.
В этом была вся проблема.
HardCoder
13.03.2012, 22:55
Может в конкретно вашем случае - это хороший вариантtable.getChildAtНо в таком случае вам нужно помнить индексы каждого вложенного мувиклипа. Рисовать на бумажке все клипы и расставлять каждому индекс, чтобы потом не забыть? Не проще ли дать каждому клипу имя и обращатся к ним по имени:trace(table.someChild1);
trace(table.someChild2);
Так и делала с trace (table.getChildAt(i)); [i=0..] Просто по-началу не поняла, что Table он спрайт.
gloomyBrain
13.03.2012, 23:52
var d:DisplayObject = (DisplayObject) new Sprite();
У меня не компилируется.
HardCoder
13.03.2012, 23:59
var d:DisplayObject = (DisplayObject) new Sprite();
У меня не компилируется.А так компилируется:var d:DisplayObject = (DisplayObject) (new Sprite());
gloomyBrain
14.03.2012, 13:26
Ну что, давайте сравним 3 способа (код + байт-код):
1)
var d:DisplayObject = (DisplayObject) (new Sprite());
_as3_getlex flash.display::DisplayObject
_as3_getglobalscope
_as3_findpropstrict flash.display::Sprite
_as3_constructprop flash.display::Sprite(param count:0)
_as3_call (param count:1)
_as3_coerce flash.display::DisplayObject
2)
var d:DisplayObject = DisplayObject(new Sprite());
_as3_findpropstrict flash.display::DisplayObject
_as3_findpropstrict flash.display::Sprite
_as3_constructprop flash.display::Sprite(param count:0)
_as3_callproperty flash.display::DisplayObject(param count:1)
_as3_coerce flash.display::DisplayObject
3)
var d:DisplayObject = new Sprite() as DisplayObject;
_as3_findpropstrict flash.display::Sprite
_as3_constructprop flash.display::Sprite(param count:0)
_as3_getlex flash.display::DisplayObject
_as3_astypelate
_as3_coerce flash.display::DisplayObject
Итак, судя по всему 1) и 2) - практически одно и то же: вызов функции пакета DisplayObject c параметром. Отличие в том, что в 1) и 2) по-разному достается ссылка на функцию DisplayObject.
И 1), и 2) могут выкинуть исключение, в отличии от 3, который в случае неудачи просто вернет null.
Если судить по количеству инструкций - то самый медленный способ должен быть 1), который и использует автор. Более того, этот способ небезопасен.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.