Toon posts:

[FlashMx] Vreemde referenties?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Met onderstaand stukje snelle code, maak ik bij initialisatie een aantal movieclips aan, welke ik later ga gebruiken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function init(){
    var i=maxPages;
    var depth=5;
    while(i--){
        this.createEmptyMovieClip("page"+i+"",depth++);
        trace(eval("page"+i+""));
        
        with(eval("page"+i+"")){
            attachMovie("page", "Print", 1);
            with(Print){
                imageClip.loadMovie("page"+i+".jpg");
            }
        }
        
    }
}
init();



Vervolgens wil ik er eentje gebruiken en doe ik duplicateMovieClip

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
var tmp = duplicateMovieClip("page"+(flipPage-dir*.5), "Print", 1);

trace(tmp);
trace('_level0.Pages.page0.Print.imageClip:'+_level0.Pages.page0.Print.imageClip);
trace('this.imageClip:'+this.imageClip);
trace('tmp.imageClip:'+tmp.imageClip);
trace('FTPage.imageClip:'+FTPage.imageClip);
trace('Pages.FTPage.imageClip:'+Pages.FTPage.imageClip);
trace('imageClip:'+imageClip);
trace('this.page0.imageClip:'+this.page0.imageClip);
trace('_root.Pages.page0.imageClip:'+_root.Pages.page0.imageClip);
trace('Print.imageClip:'+Print.imageClip);
trace('tmp.Print.imageClip:'+tmp.Print.imageClip);


In de "page" movieclip in init zit een child movieclip met de naam imageClip, deze zou nu na de duplicate ook beschikbaar moeten zijn, dus ik probeer hier een referentie naar te leggen. Zoals je aan de achtelijke hoeveelheid traces kunt zien krijg ik die niet terug, behalve ..

als ik var tmp = duplicateMovieClip("page"+(flipPage-dir*.5), "Print", 1); gebruik krijg ik bij een volledig pad hier wel resultaat met
trace('_level0.Pages.page0.Print.imageClip:'+_level0.Pages.page0.Print.imageClip);

maar niet bij page1, die heeft schijnbaar een evaluate nodig ?!?!

var tmp = duplicateMovieClip(eval("page"+(flipPage-dir*.5)), "Print", 1);
trace('_level0.Pages.page0.Print.imageClip:'+_level0.Pages.page0.Print.imageClip);

Nu heb ik dus 2 issues, hoe krijg ik in vredesnaam een referentie naar imageClip? En ten 2de, waarom is FlashMX zo verdomd inconsistent bezig met dat eval gebeuren? :/

[ Voor 21% gewijzigd door Verwijderd op 27-05-2004 13:26 ]


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 20:42
Ten eerste zou ik geen
code:
1
eval("page"+i+"");

gebruiken, maar
code:
1
this["page"+i];



En wat krijg je als je dit trace'd?
code:
1
trace(this["page"+(flipPage-dir*.5)]);


Overigens zal de onderstaande code uberhaupt niet werken want de duplicateMovieClip() functie verwacht als eerste parameter een object en geen string. Dus je zult daar iets neer moeten zetten in de trant van
code:
1
2
var pageRef = _level0.Pages["page"+(flipPage-dir*.5)].Print.imageClip
var tmp = duplicateMovieClip(pageRef, "Print", 1);

[ Voor 68% gewijzigd door Canard op 27-05-2004 13:41 ]


Verwijderd

Topicstarter
Deze zijn identiek in resultaat:
trace('tmp:'+tmp);
trace('collection:'+this["page"+(flipPage-dir*.5)]);

Verwijderd

Topicstarter
Canard schreef op 27 mei 2004 @ 13:34:

Overigens zal de onderstaande code uberhaupt niet werken want de duplicateMovieClip() functie verwacht als eerste parameter een object en geen string. Dus je zult daar iets neer moeten zetten in de trant van
code:
1
2
var pageRef = _level0.Pages["page"+(flipPage-dir*.5)].Print.imageClip
var tmp = duplicateMovieClip(pageRef, "Print", 1);
Ik heb dit zojuist gechecked in de Flash dictionary, en zo te zien heb je gelijk. DWMX2004 geeft met tag insight, als parameters (oldname,newname,depth) .. alwee een bug dus

Echter wordt tmp wel gereturned, .. dus hij is wel duplicated :)

[ Voor 8% gewijzigd door Verwijderd op 27-05-2004 13:43 ]


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 20:42
Heb je er rekening mee gehouden dat het minimaal één frame kan duren voordat een ingeladen/attached movieclip beschikbaar is om te gebruiken binnen ActionScript?

De imageClip is er misschien nog niet op het moment dat je deze wilt gebruiken...

Verwijderd

Topicstarter
Canard schreef op 27 mei 2004 @ 13:45:
Heb je er rekening mee gehouden dat het minimaal één frame kan duren voordat een ingeladen/attached movieclip beschikbaar is om te gebruiken binnen ActionScript?

De imageClip is er misschien nog niet op het moment dat je deze wilt gebruiken...
Erm.. nee, niet mee rekening gehouden eigenlijk :) Maar dan moet ik dus allerlei vage zut gaan uithalen met onenterframe en telkens controleren of hij al beschikbaar is of iets derg.

Echter levert dit in mijn init ook geen errors op :)


with(eval("page"+i+"")){
attachMovie("page", "Print", 1);
with(Print){
imageClip.loadMovie("page"+i+".jpg");
}
}

[ Voor 16% gewijzigd door Verwijderd op 27-05-2004 13:49 ]


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 20:42
Is dit misschien een soortgelijk probleem? [rml][ FlashMX] attachMovie met methods, methods niet bereikbaar[/rml]/ :)

Dus tmp is wel degelijk de movieclip die ge-duplicate is?
Wat is dan het probleem?

[ Voor 102% gewijzigd door Canard op 27-05-2004 13:59 ]


Verwijderd

Topicstarter
trace('tmp.imageClip:'+tmp.imageClip); geeft helemaal niets als waarde terug, ook geen undefined of iets derg.

Maar hoe pak je dit soort zaken dan normaliter aan, je wilt eigenlijk direct de childs kunnen aanspreken, anders heeft het totaal geen zin om objecten met een eigen timeline in een parent object met een timeline te plaatsen. :)

En om nou alles wat maar los en vast hangt op _global te overriden met eigen methods die bij initialisatie beschikbaar zijn is ook zo wat.

[ Voor 19% gewijzigd door Verwijderd op 27-05-2004 13:59 ]


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 20:42
is het niet
code:
1
2
3
4
5
tmp.Print.imageClip

i.p.v.

tmp.imageClip

Verwijderd

Topicstarter
Canard schreef op 27 mei 2004 @ 14:02:
is het niet
code:
1
2
3
4
5
tmp.Print.imageClip

i.p.v.

tmp.imageClip
Nou in principe zeg je toch, dupliceer de movieclip pageX naar de instantie Print, en ken de referentie toe aan tmp. Dus dan zou tmp dus direct naar de nieuwe movieclip Print moeten verwijzen en wordt Print niet een child van pageX. :)

Maar er ik heb nog een bijkomend probleem, en dat is dat van het een op het andere moment mijn MC's verdwenen zijn, althans de referenties.

[ Voor 22% gewijzigd door Verwijderd op 27-05-2004 14:16 ]


  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 20:42
Nou in principe zeg je toch, dupliceer de movieclip pageX naar de instantie Print, en ken de referentie toe aan tmp. Dus dan zou tmp dus direct naar de nieuwe movieclip Print moeten verwijzen en wordt Print niet een child van pageX. :)
nee :) als je zegt ...
code:
1
duplicatieMovieClip(_level0.main.sub.filmpje, "film", 10);

... kopieer je de movieclip "filmpje" naar de movieclip "film". En de "film" zit dan in the this-scope.

Voorbeeld:
Als binnen "filmpje" nog een sub-movieclip zit genaamd "intro", kun je de "intro" movieclip van "film" benaderen met this.film.intro of this["film"]["intro"]

snappie ;)

Maar waarom gebruik je duplicateMovieClip() ? Misschien kun je het beter oplossen met attachMovie()

[ Voor 17% gewijzigd door Canard op 27-05-2004 15:41 ]


Verwijderd

Topicstarter
Canard schreef op 27 mei 2004 @ 15:35:
[...]

nee :) als je zegt ...
code:
1
duplicatieMovieClip(_level0.main.sub.filmpje, "film", 10);

... kopieer je de movieclip "filmpje" naar de movieclip "film". En de "film" zit dan in the this-scope.

Voorbeeld:
Als binnen "filmpje" nog een sub-movieclip zit genaamd "intro", kun je de "intro" movieclip van "film" benaderen met this.film.intro of this["film"]["intro"]

snappie ;)

Maar waarom gebruik je duplicateMovieClip() ? Misschien kun je het beter oplossen met attachMovie()
Met attachMovie ben ik gebonden aan vaste items in de library. Uiteindelijk moet het geheel dynamisch gaan werken waarbij de items adhv xml worden opgebouwd. :)

  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 20:42
Aha... dus een soort van UI generator?

Verwijderd

Topicstarter
Canard schreef op 27 mei 2004 @ 15:48:
Aha... dus een soort van UI generator?
Nee, de welbekende pageflip maar ditmaal opgebouwd via xml. En het is niet zo handig als je je 1x per 6mnd. bezig houd met FlashMX :)

Ik heb ook nog een aantal andere vreemde zaken waar je mee vastloopt, zoals objecten die opeens niet meer bestaan na een mouse event.
Pagina: 1