Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Error #2006 подскажыте в чем фишка... (http://www.flasher.ru/forum/showthread.php?t=133200)

Killer_13 29.11.2009 20:49

Error #2006 подскажыте в чем фишка...
 
Здравств.

Вот... должен быть ролик (танцующая девушка) которая вызывается функцией copyGirl()
а ззади нее фон должен меняться к примеру каждых 3 секунды вызывается функцией tim().
вот код

Код AS3:

package 
{
        import flash.display.*;
        import flash.events.*;
        import flash.net.URLRequest;
        import flash.utils.Timer;
 
        public class girl extends Sprite
        {
                public function girl()
                {
                        tim();
                        copyGirl();
                }
 
                public function tim(){
                var timer:Timer = new Timer(3000, 0);
                        timer.addEventListener(TimerEvent.TIMER, bild);
                        timer.start();
                }
 
                var loader:Loader = new Loader();
 
                public function bild(e:TimerEvent):void
                {
 
                        var randBild:int = Math.random()*5;
                        var nam:String = "swirl-"+randBild+".jpg";
                        var urlR:URLRequest = new URLRequest(nam);
                        trace(nam);
                        loader.load(urlR);
                        stage.addChildAt(loader,1);
                }
 
                public function copyGirl()
                {
                        var childs:Array = [];
 
                        for (var i:uint = 0; i<2; i++){
                                var st:mcgirl = new mcgirl;
                                stage.addChildAt(st,2);
                                childs.push(st);
                        }
 
                        var g0:mcgirl = childs[0];
                        var g1:mcgirl = childs[1];
 
                        g0.x = -110;
                        g0.y = 90;
                        g1.x = 120;
                        g1.y = 90;
                }
        }
}

если первой запускается функция tim() тогда ролик не грузиться только меняются картинки, но начинают появлятся через 3 секунды, понятно почему, нужно еще прописать с самого начало картинку чтоб подгружалась, а потом каждых 3 сек.
пишет
Код:

RangeError: Error #2006: Предоставленный индекс выходит за допустимые пределы.
        at flash.display::DisplayObjectContainer/addChildAt()
        at flash.display::Stage/addChildAt()
        at girl/copyGirl()
        at girl()

а если первой ставлю ф-цию copz Girl(), то вообще ничего не работает. :(

Подскажите как и в будущем избегать такой ошыбки?

Пасибо.

Felicast 29.11.2009 21:08

ну судя по коду ошибка здесь:
Код AS3:

stage.addChildAt(st,2);

два вопроса:
1 зачем вы добавляете на stage? - это плохо
2 вы добавляете st во второй уровень. вы уверены, что там добавлены объекты в 0-й и 1-й уровни?

veisss 29.11.2009 21:16

скорей всего проблема тута
Код AS3:

stage.addChildAt(loader,1);
stage.addChildAt(st,2);

помоему ты строго прописываешь индекс используй
Код AS3:

container.addChildAt(child,0)//в начало
container.addChildAt(child,container.numChilden-1); //в конец


Killer_13 29.11.2009 21:27

Felicast -
1. потому, что новичек, как правильней добавлять обьекты?
2. не уверен, проверю, попробую

veisss
попробую, отпишусь

пасибо.

SamFR 29.11.2009 21:28

Код AS3:

container.addChildAt(child,container.numChilden-1); //в конец

равносильно

Код AS3:

container.addChild(child);

:)

Felicast 29.11.2009 22:06

Цитата:

1. потому, что новичек, как правильней добавлять обьекты?
можно просто addChild/addChildAt
можно завести контейнер какой-нибудь. (как в приведенных примерах (container))

Killer_13 29.11.2009 22:07

SamFR
Код AS3:

container.addChildAt(child,container.numChilden-1); //в конец

а первый елемент как тогда?

а то что вы написали равносильно, эт просто добавить обьек и не добавлять к нему позицю, просто поставить его на stage_? правильно я думаю?

Добавлено через 1 минуту
Felicast дык контейнер это свойство или нужно создавать к примеру
Код AS3:

var container:---- = new ----()

Добавлено через 2 часа 36 минут
Вот.. переделал, кажется правильно, но остается та ж ошыбка... :(
Что я сделал неправильно?

Код AS3:

package 
{
        import flash.display.*;
        import flash.events.*;
        import flash.net.URLRequest;
        import flash.utils.Timer;
 
        public class girl extends Sprite
        {
                public function girl()
                {
                        tim();
                        copyGirl();
                }
 
                public function tim(){
                var timer:Timer = new Timer(3000, 0);
                        timer.addEventListener(TimerEvent.TIMER, bild);
                        timer.start();
                        }
 
                var container:Sprite = new Sprite();
                var loader:Loader = new Loader();
 
                public function bild(e:TimerEvent):void
                {
 
                        var randBild:int = Math.random()*5;
                        var nam:String = "swirl-"+randBild+".jpg";
                        var urlR:URLRequest = new URLRequest(nam);
                        trace(nam);
                        loader.load(urlR);
                        container.addChildAt(loader,0);
                }
 
                public function copyGirl()
                {
                        var childs:Array = [];
 
                        for (var i:uint = 0; i<2; i++){
                                var st:mcgirl = new mcgirl;
                                container.addChildAt(st,container.numChildren-1);
                                childs.push(st);
                        }
 
                        var g0:mcgirl = childs[0];
                        var g1:mcgirl = childs[1];
 
                        g0.x = -110;
                        g0.y = 90;
                        g1.x = 120;
                        g1.y = 90;
                }
        }
}


SamFR 30.11.2009 01:09

Используйте addChildAt() только в том случае, когда вам нужно добавить объект на уже занятую позицию. В остальных случаях – addChild().

Код AS3:

public function bild(e:TimerEvent):void
{
        var randBild:int = Math.random()*5;
        var nam:String = "swirl-"+randBild+".jpg";
        var urlR:URLRequest = new URLRequest(nam);
        trace(nam);
        loader.load(urlR);
        container.addChild(loader);
}
 
public function copyGirl()
{
        var childs:Array = [];
 
        for (var i:uint = 0; i<2; i++){
                var st:DisplayObject = new mcgirl;
                container.addChild(st);
                childs.push(st);
        }
 
        var g0:mcgirl = childs[0];
        var g1:mcgirl = childs[1];
 
        g0.x = -110;
        g0.y = 90;
        g1.x = 120;
        g1.y = 90;
}

Добавлено через 1 минуту
Позвольте поинтересоваться, зачем вам тут лоадер?

Killer_13 30.11.2009 01:33

Чуток не понял, как эт на уже занятую позицию, а почему не работает так как делал я? Читал, в книге и в хелпе адобовском - вроде все правильно, методом addChildAt добавляю в контейнер обьекты, а потом присваиваю им индексы 0 первый элемент, тоисть самый нижний, далее 1 и так д... numChilden-1 последний элемент тоисть самы верхний.
Пасиб.

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

Добавлено через 6 минут
Не работает и так, - ругается на строку,
Код AS3:

container.addChildAt(st);

- что не хватает параметров
попробовал и так писать,
Код AS3:

container.addChildAt(st,1);

Код AS3:

container.addChildAt(st,container.numChildren-1);

все равно остается та же ошыбка. :(

Dimax4d 30.11.2009 01:43

Пишите вот так, должно заработать

Код AS3:

container.addChild(st);

UPD. А не работало потому что при добавлении первого ребенка у вас container.numChildren=0 и следовательно container.numChildren-1 = -1, а на -1 позицию добавлять нельзя. Вот и получается ваш

Цитата:

Error #2006: Предоставленный индекс выходит за допустимые пределы.


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

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