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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.04.2012, 16:26
heartless вне форума Посмотреть профиль Отправить личное сообщение для heartless Найти все сообщения от heartless
  № 1  
Ответить с цитированием
heartless

Регистрация: Nov 2010
Сообщений: 52
По умолчанию как обращаться к child'ам мувиклипа в FlashDevelop

такая проблема, IDE видит кнопочки, поля и тд на поточном спрайте, а FD - нет
делаю так:
Код AS3:
	public class MyMovieClip extends Sprite 
 
...............................
 
		public function func(e:Event = null):void
		{
			var pb:DisplayObject;
			pb = DisplayObject(getChildByName("Btn"));
			TextField(pb).visible = false;
		}
тоесть, в библиотеке ИДЕ есть MyMovieClip (выше его класс) с текстовым полем, у которой имя Btn
в итоге вылетаю в функции func, потому что pb == null.

Хочу спросить у опытных пользователей FD, как проще реализовать доступ к таким елементам

Старый 29.04.2012, 16:32
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
public class MyMovieClip extends Sprite
Спрайт по умолчанию пуст. В нем нет детей. Откуда тогда взяться "Btn"?
Насколько я понял по первой фразе, вы пишете проект на чистом as3 и компилите через FlexSDK с его mxmlc. Графика вся в swc?
__________________
тут я

Старый 29.04.2012, 16:39
heartless вне форума Посмотреть профиль Отправить личное сообщение для heartless Найти все сообщения от heartless
  № 3  
Ответить с цитированием
heartless

Регистрация: Nov 2010
Сообщений: 52
да, графика в swc, а пишу в FD.

Старый 29.04.2012, 16:41
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 4  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Тогда либо композиция, то есть внутри этого класса создавать графический ассет и стучаться к его чайлдам. Либо наследоваться не от спрайта, а от класса граф.ассета.
__________________
тут я

Старый 29.04.2012, 16:52
heartless вне форума Посмотреть профиль Отправить личное сообщение для heartless Найти все сообщения от heartless
  № 5  
Ответить с цитированием
heartless

Регистрация: Nov 2010
Сообщений: 52
а как быть там где структура вот такая: class1 extends class2 extends Sprite ? только композиция?

ну и допустим что у меня композиция, так мне каждый раз нужно писать это
Код AS3:
var pb:DisplayObject;
pb = DisplayObject(getChildByName("Btn"));
TextField(pb).visible = false;
???
Нету кода, который сам создаст ссылки, или что-то подобное?

Старый 29.04.2012, 16:59
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
В данном случае только композиция. Опять говорю, в as3 нет множественного наследования.
Если этот кусок кода нужно писать во всех потомках, то может стоит его поместить в родительский класс?
__________________
тут я

Старый 29.04.2012, 17:00
heartless вне форума Посмотреть профиль Отправить личное сообщение для heartless Найти все сообщения от heartless
  № 7  
Ответить с цитированием
heartless

Регистрация: Nov 2010
Сообщений: 52
а как перебрать все елементы на спрайте и узнать для каждого его уникальное имя в коде?

Старый 29.04.2012, 17:06
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Код AS3:
var maxIndex:uint = _sprite.numChildren;
for (var i:uint = 0; i < maxIndex; i++) {
    trace( (_sprite.getChildAt(i) as MovieClip).name );
}
При условии, что там ТОЛЬКО объекты класса MovieClip
__________________
тут я

Старый 01.05.2012, 06:46
AlexFrost вне форума Посмотреть профиль Найти все сообщения от AlexFrost
  № 9  
Ответить с цитированием
AlexFrost
Banned

Регистрация: Jan 2012
Сообщений: 25
Итак. (включаю телепатию на максимум).
1. вы сделали во флеше MovieClip, причём его Linkage - MyMovieClip
2. на этом MovieClip есть Dynamic TextField. у которого Instance Name - Btn.
3. экспортировали библу в swc.
4. закинули библу в проект FD
5. пытаетесь достучаться до Btn, но у вас нифига не выходит.

Если всё верно, то
Код AS3:
public class Main extends Sprite{
private var _myMc:MyMovieClip = new MyMovieClip();
public function Main(){
 addChild(_myMc);
//если меняем текст 
 _myMc.Btn.text = "йа кнопочко";
//если нужно тупо сделать tf невидимым
 _myMc.Btn.visible = false;
}
}
НО! такие фишки будут выполняться, если textfield, который вы добавляли в мувик - динамический. и Btn - его Instance Name.

Старый 01.05.2012, 17:35
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 10  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Цитата:
НО! такие фишки будут выполняться, если textfield, который вы добавляли в мувик - динамический
текстфилд не динамический класс, а мувиклип — да. И то что вы советуете не хорошо, лучше пусть человек сразу выучит как правильно работать с ДО. есть метод getChildByName и через него лучше брать детей, сразу же можно и кастить к чему надо. Пример:
Код AS3:
        public function getMovieClip(name: String): MovieClip {
            return getChildByName(name + "_mc") as MovieClip;
        }
 
 
        public function getSprite(name: String): Sprite {
            return getChildByName(name) as Sprite;
        }
 
 
        public function getTextField(name: String): TextField {
            return getChildByName(name + "_tf") as TextField;
        }
 
 
        public function getTLFTextField(name: String): TLFTextField {
            return getChildByName(name + "_tf") as TLFTextField;
        }
 
 
        public function getShape(name: String): Shape {
            return getChildByName(name) as Shape;
        }
 
 
        public function getChildByName(name: String): DisplayObject {
            if (!view) {
                throw Error("View is null, please set non-null object.");
            }
            return view.getChildByName(name);
        }

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

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

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


 


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


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