Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с setChildIndex (http://www.flasher.ru/forum/showthread.php?t=160953)

DarkKnight2009 19.07.2011 15:52

Работа с setChildIndex
 
Пытаюсь сделать текст всегда видимым.
Тоесть, если на него "наежает" какой нибудь предмет, то текст остается всегда на первом планет.
делаю следующее
setChildIndex(txt, 2)
Но флеш выдает ошибку
Код AS3:

RangeError: Error #2006: Предоставленный индекс выходит за допустимые пределы.
        at flash.display::DisplayObjectContainer/setChildIndex()
        at app.CreateText::SetText/createText()
        at app.CreateText::SetText()
        at Main()

Что не так, подскажите пожалуйста?
Текст добавляется с помощью actionscript

КорДум 19.07.2011 15:55

Очевидно, что на глубине 2 (0..1..2) ничего нет. А дисплей лист устроен как вектор (пустых элементов быть не может). Делайте
Код AS3:

setChildIndex(numChildren - 1)


goodguy 19.07.2011 16:00

А не проще ли просто addChild(txt) ?
Автоматически удалится из того места, куда добавлен и добавится снова, поверх всех остальных элементов указанного контейнера

КорДум 19.07.2011 16:01

Проще, но тема вон как зовется ;)

DarkKnight2009 19.07.2011 16:16

Если я добавлю с помощью addChild , то фигура, которая тоже таким образом добавляется в другом классе при анимации наедет на текст и закроет его.
Сама фигура имеет setChildIndex(shape, 0);
А тексту задаю setChildIndex(txt, 1);
Но выводится ошибка

КорДум 19.07.2011 16:19

Больше кода. Мало понятно пока.

goodguy 19.07.2011 16:20

ну тогда так:
Код AS3:

addChildAt(txt, getChildIndex(shape) + 1);


DarkKnight2009 19.07.2011 16:21

Текст добавляется вот так
Код AS3:

txt1 = new GetText("Alcohol And Drugs", 16, "0x000000", "Arial", false, 300, 1, xPos, 105);
                        txt2 = new GetText("Becoming Familiar With Your Vehicle", 16, "0x000000", "Arial", false, 300, 1, xPos, 130);
                        txt3 = new GetText("Defensive Driving Techniques", 16, "0x000000", "Arial", false, 300, 1, 50, 155);
                        txt4 = new GetText("Driving In Bad Weather", 16, "0x000000", "Arial", false, 300, 1, 50, 180);
                        txt5 = new GetText("Driving Privileges", 16, "0x000000", "Arial", false, 300, 1, 50, 205);
                        txt6 = new GetText("Laws And Rules Of The Road", 16, "0x000000", "Arial", false, 300, 1, 50, 230);
                        txt7 = new GetText("Road Rage", 16, "0x000000", "Arial", false, 300, 1, 50, 255);
                        txt8 = new GetText("Seat Belts", 16, "0x000000", "Arial", false, 300, 1, 50, 280);
                        txt9 = new GetText("Sharing The Road", 16, "0x000000", "Arial", false, 300, 1, 50, 305);
                        txt10 = new GetText("Signs, Signals, and Markings", 16, "0x000000", "Arial", false, 300, 1, 50, 330);
                        txt11 = new GetText("Space Management", 16, "0x000000", "Arial", false, 300, 1, 50, 355);               
 
 
                        txtArray.push(txt1);
                        txtArray.push(txt2);
                        txtArray.push(txt3);                       
                        txtArray.push(txt4);
                        txtArray.push(txt5);
                        txtArray.push(txt6);
                        txtArray.push(txt7);
                        txtArray.push(txt8);
                        txtArray.push(txt9);
                        txtArray.push(txt10);
                        txtArray.push(txt11);
for(var i:int = 0; i < coordsArray.length; i++)
                        {
                                textFieldArray[i] = new TextField();
                                textFieldArray[i].text = txtArray[i];
                                //textFieldArray[i].x = 50;
                                //textFieldArray[i].y = coordsArray[i];
                                addChild(txtArray[i]);                                                       
                        }                               
                }

Этот текст нужно вынести на первый план, поверх всех элементов, которые добавляются из других классов

КорДум 19.07.2011 16:22

Так добавьте его в отдельный контейнер. И этот контейнер выводите на передний план. Или я чего-то не понимаю?

goodguy 19.07.2011 16:23

Что-то в коде фигня какая-то. Цикл идет по одному массиву, создаются элементы в другом, а добавляются вообще элементы третьего. Что это?

DarkKnight2009 19.07.2011 16:25

Цитата:

Сообщение от КорДум (Сообщение 1012914)
Так добавьте его в отдельный контейнер. И этот контейнер выводите на передний план. Или я чего-то не понимаю?

Вы имеете в виду textFieldArray добавить в Sprite ?

КорДум 19.07.2011 16:27

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

Добавлено через 30 секунд
txtArray, судя по коду.

DarkKnight2009 19.07.2011 16:31

Цитата:

Сообщение от КорДум (Сообщение 1012920)
Судя по названию массивов - не знаю. Нужно все ваши тексты добавить в контейнер. А где там ссылки на них...

Добавлено через 30 секунд
txtArray, судя по коду.

Вот так ?
Код AS3:

                        for(var i:int = 0; i < coordsArray.length; i++)
                        {
                                textFieldArray[i] = new TextField();
                                textFieldArray[i].text = txtArray[i];
 
                                s.addChild(txtArray[i]);
                                addChild(s)
                                setChildIndex(s, 1 )
                        }

Но все равно не работает :(

КорДум 19.07.2011 16:32

Код AS3:

textFieldArray[i].text = txtArray[i];

Вы в качестве текста задаете текстовое поле? о_О

DarkKnight2009 19.07.2011 16:33

Цитата:

Сообщение от КорДум (Сообщение 1012926)
Код AS3:

textFieldArray[i].text = txtArray[i];

Вы в качестве текста задаете текстовое поле? о_О

Но у меня отрабатывает, это не правильно ?

КорДум 19.07.2011 16:35

Естественно нет. Я полагаю, у вас в текст пихается нечто вроде [object TextField].
Во-первых, определитесь с вашими массивами. Зачем вам три штуки? Вы создаете тексты, помещаете в один. Затем зачем-то второму массиву, вернее текстам его элементов, присваиваете элементы массива первого. И там что-то еще с третьим массивом было. goodguy, правильно заметил. Разберитесь в коде.

DarkKnight2009 19.07.2011 16:37

вот код, я думал, что все ок :(
Код AS3:

package app.CreateText
{
        import flash.display.MovieClip;
        import flash.text.TextField;
        import flash.text.TextFormat;
        import flash.display.Sprite;
 
        public class SetText extends MovieClip
        {
                //---------------------------------------
                // PRIVATE VARIABLES
                //---------------------------------------               
                private var txtHeader:GetText;
 
                private var txt1:GetText;
                private var txt2:GetText;
                private var txt3:GetText;
                private var txt4:GetText;
                private var txt5:GetText;               
                private var txt6:GetText;               
                private var txt7:GetText;               
                private var txt8:GetText;               
                private var txt9:GetText;               
                private var txt10:GetText;               
                private var txt11:GetText;
 
                public var textFieldArray:Array = [];       
                private var coordsArray:Array = [105, 130, 155, 180, 205, 230, 255, 280, 305, 330, 355];
 
                public var txtArray:Array = [];               
 
                public var xPos:uint = 50;
 
                private var s:Sprite = new Sprite();
 
 
                //---------------------------------------
                // CONSTRUCTOR
                //---------------------------------------
 
                /**
                * @constructor
                */
               
                public function SetText()
                {               
                        createText();                       
                }
 
                //---------------------------------------
                // PRIVATE METHODS
                //---------------------------------------
 
                /**
                * The method adds static text
                */
               
                private function createText():void
                {                       
                        txtHeader = new GetText("This course contains\nthe following topics", 24, "0x776f6c", "Arial", true, 300, 1, 50, 30);
                        addChild(txtHeader);
 
                        txt1 = new GetText("Alcohol And Drugs", 16, "0x000000", "Arial", false, 300, 1, xPos, 105);
                        txt2 = new GetText("Becoming Familiar With Your Vehicle", 16, "0x000000", "Arial", false, 300, 1, xPos, 130);
                        txt3 = new GetText("Defensive Driving Techniques", 16, "0x000000", "Arial", false, 300, 1, 50, 155);
                        txt4 = new GetText("Driving In Bad Weather", 16, "0x000000", "Arial", false, 300, 1, 50, 180);
                        txt5 = new GetText("Driving Privileges", 16, "0x000000", "Arial", false, 300, 1, 50, 205);
                        txt6 = new GetText("Laws And Rules Of The Road", 16, "0x000000", "Arial", false, 300, 1, 50, 230);
                        txt7 = new GetText("Road Rage", 16, "0x000000", "Arial", false, 300, 1, 50, 255);
                        txt8 = new GetText("Seat Belts", 16, "0x000000", "Arial", false, 300, 1, 50, 280);
                        txt9 = new GetText("Sharing The Road", 16, "0x000000", "Arial", false, 300, 1, 50, 305);
                        txt10 = new GetText("Signs, Signals, and Markings", 16, "0x000000", "Arial", false, 300, 1, 50, 330);
                        txt11 = new GetText("Space Management", 16, "0x000000", "Arial", false, 300, 1, 50, 355);               
 
 
                        txtArray.push(txt1);
                        txtArray.push(txt2);
                        txtArray.push(txt3);                       
                        txtArray.push(txt4);
                        txtArray.push(txt5);
                        txtArray.push(txt6);
                        txtArray.push(txt7);
                        txtArray.push(txt8);
                        txtArray.push(txt9);
                        txtArray.push(txt10);
                        txtArray.push(txt11);               
 
                        //setChildIndex(txtArray[2], 1 )
 
                        for(var i:int = 0; i < coordsArray.length; i++)
                        {
                                textFieldArray[i] = new TextField();
                                textFieldArray[i].text = txtArray[i];
                                //textFieldArray[i].x = 50;
                                //textFieldArray[i].y = coordsArray[i];
                                //addChild(txtArray[i]);                                                       
                                s.addChild(txtArray[i]);
                                addChild(s)
                                setChildIndex(s, 1 )
                        }       
 
                }
 
                //---------------------------------------
                // PUBLIC METHODS
                //---------------------------------------
 
                /**
                * Methods vozrvraschaet coordinates in the text Class SetImage
                */
                               
                public function get _getCoords():Array
                {
                        return coordsArray;
                }
                public function set _getCoords(coords:Array):void
                {
                        txtArray = coords;                       
                }
        } // end Class       
} // end Package

Все работает нормально, только текст на первый план не выводится, ошибок нет никаких(флеш не выводит)

Добавлено через 9 минут
Я понял, вот поубирал лишнии массивы, добавил в спрайт.ю но все по старому
Код AS3:

package app.CreateText
{
        import flash.display.MovieClip;
        import flash.text.TextField;
        import flash.text.TextFormat;
        import flash.display.Sprite;
 
        public class SetText extends MovieClip
        {
                //---------------------------------------
                // PRIVATE VARIABLES
                //---------------------------------------               
                private var txtHeader:GetText;
 
                private var txt1:GetText;
                private var txt2:GetText;
                private var txt3:GetText;
                private var txt4:GetText;
                private var txt5:GetText;               
                private var txt6:GetText;               
                private var txt7:GetText;               
                private var txt8:GetText;               
                private var txt9:GetText;               
                private var txt10:GetText;               
                private var txt11:GetText;
 
                private var coordsArray:Array = [105, 130, 155, 180, 205, 230, 255, 280, 305, 330, 355];
 
                public var txtArray:Array = [];               
 
                public var xPos:uint = 50;
 
                private var s:Sprite = new Sprite();
 
 
                //---------------------------------------
                // CONSTRUCTOR
                //---------------------------------------
 
                /**
                * @constructor
                */
               
                public function SetText()
                {               
                        createText();                       
                }
 
                //---------------------------------------
                // PRIVATE METHODS
                //---------------------------------------
 
                /**
                * The method adds static text
                */
               
                private function createText():void
                {                       
                        txtHeader = new GetText("This course contains\nthe following topics", 24, "0x776f6c", "Arial", true, 300, 1, 50, 30);
                        addChild(txtHeader);
 
                        txt1 = new GetText("Alcohol And Drugs", 16, "0x000000", "Arial", false, 300, 1, xPos, 105);
                        txt2 = new GetText("Becoming Familiar With Your Vehicle", 16, "0x000000", "Arial", false, 300, 1, xPos, 130);
                        txt3 = new GetText("Defensive Driving Techniques", 16, "0x000000", "Arial", false, 300, 1, 50, 155);
                        txt4 = new GetText("Driving In Bad Weather", 16, "0x000000", "Arial", false, 300, 1, 50, 180);
                        txt5 = new GetText("Driving Privileges", 16, "0x000000", "Arial", false, 300, 1, 50, 205);
                        txt6 = new GetText("Laws And Rules Of The Road", 16, "0x000000", "Arial", false, 300, 1, 50, 230);
                        txt7 = new GetText("Road Rage", 16, "0x000000", "Arial", false, 300, 1, 50, 255);
                        txt8 = new GetText("Seat Belts", 16, "0x000000", "Arial", false, 300, 1, 50, 280);
                        txt9 = new GetText("Sharing The Road", 16, "0x000000", "Arial", false, 300, 1, 50, 305);
                        txt10 = new GetText("Signs, Signals, and Markings", 16, "0x000000", "Arial", false, 300, 1, 50, 330);
                        txt11 = new GetText("Space Management", 16, "0x000000", "Arial", false, 300, 1, 50, 355);               
 
 
                        txtArray.push(txt1);
                        txtArray.push(txt2);
                        txtArray.push(txt3);                       
                        txtArray.push(txt4);
                        txtArray.push(txt5);
                        txtArray.push(txt6);
                        txtArray.push(txt7);
                        txtArray.push(txt8);
                        txtArray.push(txt9);
                        txtArray.push(txt10);
                        txtArray.push(txt11);               
 
                        for(var i:int = 0; i < coordsArray.length; i++)
                        {
                                txtArray[i];
                                s.addChild(txtArray[i]);
                                addChild(s)
                                setChildIndex(s, 1 )
                        }       
 
                }
 
                //---------------------------------------
                // PUBLIC METHODS
                //---------------------------------------
 
                /**
                * Methods vozrvraschaet coordinates in the text Class SetImage
                */
                               
                public function get _getCoords():Array
                {
                        return coordsArray;
                }
                public function set _getCoords(coords:Array):void
                {
                        txtArray = coords;                       
                }
        } // end Class       
} // end Package

Добавлено через 11 минут
Извините, случайно добавил лишний раз одно и тоже, а как уюрать не знаю :(

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

Сообщение от goodguy (Сообщение 1012915)
Что-то в коде фигня какая-то. Цикл идет по одному массиву, создаются элементы в другом, а добавляются вообще элементы третьего. Что это?

Уже исправил, лишнее поудалял
Спасибо


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

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