PDA

Volledige versie bekijken : Child index out of bounds?


Albus
%Europe/Berlin %694 %2007, 17:39
Hallo,

In een for-lus maak k enkele movieclips aan die k een child index meegeef.
Als k dit test, dan krijg k volgende error: "RangeError: Error #2006: The supplied index is out of bounds."
Waarom?
K heb toch elke diepte gebruikt?
Als je kijkt naar de addChildAt, dan zie je dat k telkens de juiste waarde opgeef.
1: i = 0,1,2
2: 3 + i = 3,4,5
3: 6 + i = 6,7,8

K vraag me af wat hier het probleem vormt.

for(var i:Number=0;i<3;i++) {
var vlak:MovieClip = new MovieClip();
addChildAt(vlak,i);
vlak.graphics.beginFill(0xFFFFFF);
vlak.graphics.lineTo(vlak_b,0);
vlak.graphics.lineTo(vlak_b,vlak_l);
vlak.graphics.lineTo(0,vlak_l);
vlak.graphics.endFill();
vlak.name = "vlak"+i;
vlak.i = i;
vlak.w = w;
vlak.x = vlak_x;
vlak.y = vlak_y + ((vlak_l+spatie)*i);
vlak.alpha = 0.25;

var knop:MovieClip = new MovieClip();
addChildAt(knop,3+i);
knop.graphics.beginFill(0x640000);
knop.graphics.lineTo(vlak_b,0);
knop.graphics.lineTo(vlak_b,vlak_l);
knop.graphics.lineTo(0,vlak_l);
knop.graphics.endFill();
knop.name = "knop"+i;
knop.x = vlak.x;
knop.y = vlak.y;
knop.alpha = 1;

var naam_tekstveld:TextField = new TextField();
addChildAt(naam_tekstveld,6+i);
naam_tekstveld.name = "naam_tekstveld"+i;
naam_tekstveld.defaultTextFormat = tekst_opmaak;
naam_tekstveld.embedFonts = true;
naam_tekstveld.autoSize = "left";
naam_tekstveld.selectable = false;
naam_tekstveld.text = xml.child(i).child(0);
naam_tekstveld.x = vlak.x + 4;
naam_tekstveld.y = vlak.y + ((vlak_l - naam_tekstveld.height)/2);
}

Albus
%Europe/Berlin %543 %2007, 14:01
Dit moet toch op te lossen zijn, niet?

niva
%Europe/Berlin %567 %2007, 14:37
Child Indexen beginnen altijd bij nul, dus als je een movieClip wilt toevoegen aan een container, dan moet je bij nul beginnen of na het laatste kind.

maak van 6+i en 3+i maar gewoon eens i en voeg daarna, knop, vlak en naam maar gewoon toe aan je container / stage

PS als je door jouw for lus heen loopt, add hij children op 0, 3, 6 en dan 1, 4, 7, etc

dat kan niet het moet 0, 1, 2 en dan 3, 4, 5

matzo
%Europe/Berlin %575 %2007, 14:48
Klopt, dit is dus veranderd in Actionscript 3.0, depths(al is het idee van 'depth' dus ook veranderd in Actionscript 3.0) moeten elkaar voortaan opvolgen. Zoals Niva zegt dus.

TheDutch
%Europe/Berlin %689 %2007, 17:33
Als toevoeging op wat de anderen al zeiden; kijk eens naar de volgende functies om dieptes te bepalen in AS 3: swapChildren(), setChildIndex(), en swapChildrenAt().

Albus
%Europe/Berlin %020 %2007, 01:28
Bedankt voor de verhelderende uileg! Het werk nu nadat k elke verzameling movieclips (vlak, knop, ..) in afzonderlijke containers plaatste.

Hoe was julie vakantie (aangezien er plots 3 mensen reageren na dagen geen reactie)?

niva
%Europe/Berlin %483 %2007, 12:36
Vakantie, VAKANTIE! moet gewoon werken! ;-) kom alleen niet zo vaak meer op dit forum moest alleen zelf even een post plaatsen.

Blij dat het werkt, AS3 en AS2 verschillen nogal van elkaar, getuige ook het hele nieuwe systeem voor het plaatsen van DisplayObjecten

Greetz Roy

Albus
%Europe/Berlin %020 %2007, 01:30
Blij dat het werkt, AS3 en AS2 verschillen nogal van elkaar, getuige ook het hele nieuwe systeem voor het plaatsen van DisplayObjecten

Ja, dat heb k gemerkt, sinds AS3 vind k persoonlijk dat alles makkelijker en logischer werkt (hierbij denk k vooral aan event handling).

niva
%Europe/Berlin %390 %2007, 10:21
Zeker AS3 is een stuk gemakkelijker als AS2, het is alleen een omschakeling.
Maar logischer is het zeker geworden...