[as3] MovieClips vanuit een array verwijderen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik moet een spelletje maken voor school (voor het examen Programmeren).
Het spelletje is zo goed als af, maar ik zit nog met 1bug.
Dit is de link naar de online versie:
http://student.devine.be/joyce.de.groote/eindopdrachtCP1/

Nu, mijn probleem doet zich voor als je alle leventjes kwijt bent en je op de opnieuw knop klikt.
Hier springt die terug naar frame 2, ik verwijder alles wat er niet meer moet staan.
Maar mijn blokken willen niet weg, wat ik ook probeer.
Ongeveer de helft gaat weg, maar de rest blijft gwn staan.
Er komt zelfs geen error.

Hier zet'k die blokken op stage

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function creeerBlokken():void
{
//x & y positie van de blokken vastleggen
    var xPos:uint = 200;
    var yPos:uint = 100;
    
//aanmaken van de lus om de muizen te maken
//#muizen is geweten => for-lus
    for( var i:uint = 1; i <= aantalBlokken; i++){
        
    //instantie blokje aanmaken
        blokje = new Blokje();
    // blokjes positioneren
        blokje.x = xPos;
        blokje.y = yPos;
    
        xPos += 59;
    // rijen van 7 aanmaken
        if (i % 7 == 0)
        {
            xPos = 200;
            yPos += 22;
        }
    // blokken op stage zetten
        addChild(blokje);
    
    // blokken in de array steken.
        blokArray.push ( blokje );
    }
}


Manier waarop'k die blokken wil verwijderen:

code:
1
2
3
4
5
6
7
8
9
    for( var i:uint = blokArray.length; i > 0; i--)
    {
        var dpo:DisplayObject = getChildAt(i);
        if (dpo is Blokje)
        {
            removeChild(dpo);
        }
        
    }


weet er iemand wat ik verkeerd doe?

Acties:
  • 0 Henk 'm!

Verwijderd

Wellicht is getchildat(i) niet de beste manier om de blokjes te vinden... (aangezien het 'theoretisch' mogelijk is dat er nog andere zut op je display komt te staan, wat een index kan hebben wat precies in je range van je for loop ligt.)

Ik heb laatst bijna op dezelfde manier dynamisch objecten aangemaakt:
(ik weet niet of het de meest juiste code is, maar het adden/removen werkt goed iig :D

Ik heb ergens een lege array gedefinieerd
code:
1
private var Thumbs:Array = new Array();


Vervolgens maak ik 'thumbs' op de volgende manier aan.
(even een tmp var om te initialiseren, en deze push ik vervolgens in de array, om hem vervolgens op het scherm te drukken)
code:
1
2
3
4
var i : int = Thumbs.length;
var tmp:Thumbnail = new Thumbnail(posX,posY,thumbWidth,thumbHeight);
Thumbs.push(tmp);
addChild(Thumbs[i]);        // voeg de laatst gepushde thumb toe


Thumbs verwijder ik dan als volgt:
code:
1
2
3
removeChild(Thumbs[i]);
Thumbs[i].Destructor();   // Eigen destructor functie... om nog wat events weg te gooien enzo
Thumbs[i] = null;


Op deze manier gebruik ik dus geen getchildat, en weet ik zeker dat ik het juiste object te pakken heb.

Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:32
code:
1
2
3
4
5
6
7
8
9
  for( var i:uint = blokArray.length; i > 0; i--)
    {
        var dpo:DisplayObject = getChildAt(i);
        if (dpo is Blokje)
        {
            removeChild(dpo);
        }
        
    }

ehmm het kan aan mij liggen maar moet dat niet zijn
code:
1
for( var i:int = blokArray.length -1; i > 0; i--)

Acties:
  • 0 Henk 'm!

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 18-08 16:56
Flash ActionScript:
1
2
3
4
5
6
7
8
if(blokArray && blokArray is Array) {
   while(blokArray.length != 0) {
      var blokje:Blokje = Blokje(blokArray.pop());
      if(blokje && blokje.parent) {
         blokje.parent.removeChild(blokje);
      }
   }
}

[ Voor 16% gewijzigd door McVirusS op 21-12-2009 15:09 ]


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

waarom doe je niet gewoon
code:
1
2
3
4
5
  for( var i:uint = blokArray.length; i > 0; i--)
    {
        removeChild(blokArray.pop());
        
    }


is je array ook meteen leeg :D

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • McVirusS
  • Registratie: Januari 2000
  • Laatst online: 18-08 16:56
Tsjilp schreef op maandag 21 december 2009 @ 15:11:
waarom doe je niet gewoon
code:
1
2
3
4
5
  for( var i:uint = blokArray.length - 1; i >= 0; i--)
    {
        removeChild(blokArray.pop());
        
    }


is je array ook meteen leeg :D
Kan ook (heb wel even je voorbeeld gecorrigeerd :P). Mijn voorbeeld is natuurlijk veeeeeeeeeel netter :+.

Acties:
  • 0 Henk 'm!

  • Phyxion
  • Registratie: April 2004
  • Niet online

Phyxion

_/-\o_

Er zit trouwens nog een bug in, als je met het plankje er over heen gaat (Terwijl die al wat onder de bovenkant van het plankje is) dan stuitert ie terug vanaf de stenen.

'You like a gay cowboy and you look like a gay terrorist.' - James May


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:32
dat balletje krijg ook niet altijd de goede snelheid mee wanneer die stuitert/afkaatst...

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Kunnen we het ontopic houden aub? :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb gedaan wat hier gezegd werd en het probleem is opgelost.
Bedankt allemaal!! :)

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Overigens laten we ActionScript topics in WEB, dus een klein kickje die kant op.

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1