PDA

Volledige versie bekijken : mc verwijderen


vivendi
%Europe/Berlin %742 %2009, 18:49
Ik heb 2 movieclips. 1 op mijn stage die leeg is (ItemHolder), en 1 in mijn library (itemList).

De movieclip 'itemList' laadt ik dmv AS2 in ItemHolder met attachMovie. Dit kan in principe tientallen keer gebeuren.
de movieclip itemList wordt dan netjes onder elkaar getoond. Maar in de movieclip itemList zit ook een button.

Ik wil graag dat wanneer ik op die button klik, hij zichzelf verwijderd uit ItemHolder. Alleen wil dit mij niet helemaal lukken. Ik probeer het nu zo:


filename = "itemList"+amountOfItems;
ItemHolder.attachMovie("itemList", filename, amountOfItems, { _x:posX, _y:posY } );
ItemHolder[filename].txtBestandsnaam.text = file.name;
posY += 70;

ItemHolder[filename].btnVerwijder.onRelease = function () {
amountOfItems--;
posY -= 70;
removeMovieClip ( ItemHolder[filename] );
}


Dit werkt al soortvan, maar nu kan ik alleen het laatste item verwijderen.
Ook als ik op de 1ste klik, wordt alsnog de laatste verwijderd. Ik krijg in elk geval niet het resultaat wat ik wil. Hoe kan ik dit wel goed werkend krijgen?? Hoe weet ik welke van welke movieclip de button btnVerwijder is ingedrukt, zodat ik die ook movieclip ook weer kan verwijderen??

Dauntless
%Europe/Berlin %756 %2009, 19:09
Probeer dit:
this.parent.parent.removeMovieClip(this.parent);He t kan zijn dat je 1 keer de .parent moet verwijderen indien je button een echte button is en geen MovieClip.

vivendi
%Europe/Berlin %768 %2009, 19:27
Probeer dit:
this.parent.parent.removeMovieClip(this.parent);He t kan zijn dat je 1 keer de .parent moet verwijderen indien je button een echte button is en geen MovieClip.

Dat werkte helaas niet. Heb ook 1 parent minder geprobeerd. En de button is idd een echte button en geen movieclip.

Misschien is dit nog handig ter verduidelijking voor andere.

Library -> itemList -> button:btnVerwijder
Stage -> ItemHolder (lege MC) -> (attachMovie)kan meerdere itemLists in laden waarbij de Y pos steeds veranderd. Komen dus onder elkaar.

Omdat de movieclip en dus ook de button al is aangemaakt heeft de button de propertyname 'btnVerwijder'.
Dus elke keer als ik met attachMovie de MC itemList toevoeg heet die button ook elke keer 'btnVerwijder'. Het lijkt me alleen wel dat daar onderscheidt tussen gemaakt moet kunnen worden omdat elke MC die ik aanmaak met attachMovie een unieke naam geef. Daar zou ik toch iets mee moeten kunnen??

Jan
%Europe/Berlin %786 %2009, 19:52
Je gebruikt een class/instance method als een global function waardoor het niet kan werken.
MovieClip class: (geen argumenten) :
public removeMovieClip() : Void

global function (wel argumenten) :
removeMovieClip(target:Object)

Correct script zou (volgens mij) moeten zijn:
class/instace method:
ItemHolder[filename].btnVerwijder.onRelease = function ()
{
amountOfItems--;
posY -= 70;
this._parent.removeMovieClip();
}

of:
global function:
ItemHolder[filename].btnVerwijder.onRelease = function ()
{
amountOfItems--;
posY -= 70;
removeMovieClip(this._parent);
}

(In je allereerste script klopt de filename waarschijnlijk niet. Als je dat in een for loop doet zit er in fileName het laaste van de for loop. Flash slaat dat niet op IN je button/MovieClip. Gebruik gewoon this en _parent. Dat klopt altijd.)

Verder werkt removeMovieClip in het algemeen enkel voor objecten die een positieve depth hebben. Ik ga ervan uit dat amountOfItems niet negatief start... (anders moet je eerst nog swapDepths gebruiken)
In het algemeen is het beter/veiliger om met getNextHighestDepth() te werken ipv zelf een depth bij te houden.

Groeten;
Jan

vivendi
%Europe/Berlin %788 %2009, 19:55
Heel erg bedankt! Ik heb de global function geprobeerd en die lijkt prima te werken :)

Dauntless
%Europe/Berlin %431 %2009, 11:21
What was I thinking ... :#

Een rede te meer om bij AS3 te blijven ;).