PDA

Volledige versie bekijken : Duplicate


TheSilentWitness
%Europe/Berlin %517 %2005, 13:25
Yuuw,

Ik heb het volgende script:

dup.onRelease = function() {
for (i=0; i<10; i++) {
dupIt();
}
};
function dupIt():Void {
theDup = _root.attachMovie("toDup", "dupped"+i, i);
theDup._x = 0;
theDup._y = Math.random()*400;
theDup._width = theDup._height=Math.random()*25+5;
theDup.onEnterFrame = function() {
this._x += 5;
if (this._x>=540) {
this.removeMovieClip();
}
};
}




En als ik op de button (instance = dup) klik, gebeurt precies wat ik wil hebben, maar als ik erna nog eens op die button klik, dan verwijdert hij eerst de reeds gedupliceerde dingen, en daarna dupliceert hij terug de voorwerpen.



Hoe kan ik ervoor zorgen dat het reeds gedupliceerde niet verdwijnt?
Ik hoop dat ik duidelijk genoeg ben, zoniet, dan zwier ik wel ff de FLA op het web:)

Tommyfied
%Europe/Berlin %550 %2005, 14:12
Dit komt doordat die nieuwe mc's dan de oude overschrijven aangezien ze op dezelfde depth worden ingeladen (namelijk i, dus van 0 tot 9 in jou code). Je zult dus iets als this.getNextHighestDepth() moeten gebruiken in plaats van i.

TheSilentWitness
%Europe/Berlin %776 %2005, 19:38
Bangelijk:D

Hartelijk bedankt!

TheDutch
%Europe/Berlin %782 %2005, 19:46
Je zult dus iets als this.getNextHighestDepth() moeten gebruiken in plaats van i.
Of een depth variable die je global zet en dan steeds 1 bij optelt :).

theFlashWizard
%Europe/Berlin %793 %2005, 20:02
btje nutteloos als je 2004 hebt en gebruikt..
en als je zoiets wel doet moet je eigenijk per mc een variabele door de depth maken..
anders is het nog niet echt netjes..
het enigste is dat het sneller gaat met een variabele..

TheDutch
%Europe/Berlin %815 %2005, 20:34
Je hebt gelijk per MC is beter aangezien elke MC weer een eigen diepte niveau heeft. Er was laatst een discussie hier op FF over getNextHighestDepth(). Conclusie was dat getNextHighestDepth() trager is en bug gevoelig is wanneer je componenten gebruikt en je wilt diepte regelen op de _root met getNextHighestDepth().

Beter is het dus om een diepte variable te gebruiken per MC :).

theFlashWizard
%Europe/Berlin %823 %2005, 20:45
hmm maar dan heb je ook gauw de kans dat jij de bug veroorzaakt.. :P want als jij ook maar 1x een depth variabelen niet aanmaakt voordat je er bij op gaat telle gaat het al fout natuurlijk..

TheDutch
%Europe/Berlin %825 %2005, 20:49
Ik heb liever dat ik een bug veroorzaak dan dat ik rekening moet houden met bugs van Macromedia, want die zijn een stuk vreemder. En ach het is gewoon even wennen en een variable die niet is aangemaakt heb je zo gevonden lijkt me.

Je zou zelfs ook nog een eigen prototype kunnen schrijven die de diepte bijhoudt, net zoals getNextHighestDepth(), maar dan zonder Macromedia bugs ;).

Tommyfied
%Europe/Berlin %834 %2005, 21:01
Ik ben ook erg voor het zelf aanmaken van een depth variabele om de redenen die hierboven genoemd zijn. Ik noemde alleen getNextHighestDepth omdat dit duidelijk illustreert wat het probleem was en hoe je het kunt oplossen. Het maken van een eigen (en betere) workaround kan natuurlijk altijd.

TheDutch
%Europe/Berlin %848 %2005, 21:21
Hier een prototype die ik heb gemaakt om de getNextHighestDepth() te vervangen, aangezien daar bugs in zitten :).


MovieClip.prototype.getNextHighestDepth = function(){
this.newDepth = 0;
for (var i in this) {
if ((this[i].getDepth() < 1048574 || this[i].getDepth() > 2130690045) && this[i].getDepth() > 0 && (typeof(this[i]) == "movieclip" || typeof(this[i]) == "object")) {
if(this[i].getDepth() > this.newDepth){
this.newDepth = this[i].getDepth();
}
}
}

return this.newDepth+1;
}

theFlashWizard
%Europe/Berlin %851 %2005, 21:26
hmm en in zo'n prototype zou je die depth variabele kunnen maken als hij nog niet bestaan en er dan 1 bij optellen..
dan gaat het idd nog minder gauw fout..
ken je die var teminste ook nie vergete aan te maken.. :)

Tommyfied
%Europe/Berlin %855 %2005, 21:32
Refereer je nou naar de prototype die getNextHighestDpeth vervangt van TheDutch?
Dan snap ik namelij kecht niet wat je bedoelt ... ik neem wel aan dat je weet hoe een prototype werkt / wat een protype is ...

Overigens zou ik zelf geen prototype gebruiken ... het maken van een variabele die je steeds met 1 ophoogt is een stuk minder omslachtig denk ik.

TheDutch
%Europe/Berlin %857 %2005, 21:34
Probleem daarbij is dat die optelt zelfs als die waarde niet gebruikt wordt, maar bijvoorbeeld alleen getraced wordt.

Ik merk nu dat mijn prototype dezelfde bug heeft als de originele :p.
Ga hem wel proberen te fixen natuurlijk!

theFlashWizard
%Europe/Berlin %860 %2005, 21:39
ja dat prefereer ik denk idd..
en het voordeel daarbij is boven naast het alleen maar optellen van een variabele dat je kan ikbouwen dat hij als die nog niet bestaat de variabele kan aanmaken.. waardoor je die dus nooit vergeet aan te maken.. ;)
zoiets:

if(!this.D) this.D = 0
else this.D++


en ja ik weet wat een prototype is..

Tommyfied
%Europe/Berlin %862 %2005, 21:41
Probleem daarbij is dat die optelt zelfs als die waarde niet gebruikt wordt, maar bijvoorbeeld alleen getraced wordt.

Uh ... je snapt denk ik niet wat ik bedoel ...
Ik wil alleen maar een variabele aanmaken (var depth: Number = 0);
Als ik dan eens iets moet inladen / attachen / createn dan roep ik voor de depth van datgene die variabele aan en verhoog ik hem met 1 (this.attachMovie("id", "name", depth++);

Simpel en werkt ALTIJD.

theFlashWizard
%Europe/Berlin %865 %2005, 21:46
ik zeg alleen maar dat je dat (var depth: Number = 0) wellis vergete kan.. en dat als je het in zo'n prototype zet je het niet kan vergete.. en das de laaste x dat ik dat vertel.. :P

TheDutch
%Europe/Berlin %867 %2005, 21:48
Ga hem wel proberen te fixen natuurlijk!
Opgelost! Prototype werkt nu perfect :).

MovieClip.prototype.getNextHighestDepth = function(){
this.newDepth = 0;
for (var i in this) {
if ((this[i].getDepth() < 1048574 || this[i].getDepth() > 2130690045) && this[i].getDepth() > 0 && (typeof(this[i]) == "movieclip" || typeof(this[i]) == "object")) {
if(this[i].getDepth() > this.newDepth){
this.newDepth = this[i].getDepth();
}
}
}

return this.newDepth+1;
}

Tommyfied
%Europe/Berlin %867 %2005, 21:48
Code vergeten ... dan kun je ook vergeten een prototype in je huidige .fla te plakken .. .dit vind ik geen argument.

Voor we hierop verder discussieren ... dit wordt allemaal een beetje offtopic ... als je wil mag je me toevoegen op msn of yahoo ...