login  Naam:   Wachtwoord: 
Registreer je!
 Forum

meerdere movieclips inladen

Offline Bertjuh - 15/07/2006 17:22
Avatar van BertjuhHTML interesse Ik ben bezig met een spel in flash. Ik heb in de Library een standaard 'kaartHouder' gemaakt met daarop een label met bijv. 'naam'.

In een XML bestand heb ik een X aantal karakters staan, met allemaal verschillende namen.
In het beheer gedeelte van het spel is het XML bestand aan te passen zodat het aantal karakters/kaarten op het speelveld variabel is.

In een for-lus maak ik zoveel kaartHouders aan als het nodig is, en zet ik de daarbij behorende gegevens erin.

Maar nu komt het probleem: Ik weet niet hoe ik later, als ik op een willekeurige kaart klik, kan zorgen dat het programma dan ook nog weet op welke kaart ik klik?

  1. var kaartRay = new Array();
  2.  
  3. for( i = 0; i < aok.length; i++ ) {
  4. kaartRay[i] = _root.attachMovie("kaartHouder", "kaart"+i, _root.getNextHighestDepth(), {_x:X, _y:Y } );
  5. ...
  6. kaartRay[i].onRelease = function() {
  7. kaartKlik(); // kaartklik doet niets bijzonders
  8. }
  9. }

De kaarten heten nu kaart1, kaart2, kaart3, maar ik zit nu met het probleem, dat als ik op een kaart klik ik niet meer kan achterhalen welke kaart het is geweest.

ik kan wel het volgende doen: kaart2.removeMovieClip(); maar ik krijg het niet voor elkaar dat als ik op een kaart klik, ik te zien krijg, op welke manier dan ook, dat ik een bepaalde kaart geklikt heb, zodat ik met die specifieke kaart iets kan doen.

ik hoop dat het een beetje duidelijk is. Bedankt alvast!

8 antwoorden

Gesponsorde links
Offline vinTage - 15/07/2006 17:32
Avatar van vinTage Nieuw lid
  1. //for loopje hier
  2. this["kaart"+i].onRelease = function() {
  3. kaartklik();
  4. trace(this._name);
  5. removeMovieClip(this);
  6. }


ofziets 
Offline Bertjuh - 15/07/2006 17:35 (laatste wijziging 15/07/2006 17:48)
Avatar van Bertjuh HTML interesse geweldig! thnx!

ik wist niet dat je een variabele met ["kaart"+i] kon aanroepen.

edit:
Trouwens, buiten die for lus, weet hij niet meer welke kaart is geklikt. Dus het probleem is nog niet helemaal verholpen.

Want 'this' is alleen bekend binnen die onRelease functie in die for-loop. Als ik probeer te verwijzen naar een andere functie dan kent die functie de kaart niet meer.

Dus dat removeMovieclip(this) werkt wel. Maar daar ben ik er nog niet mee.
Offline vinTage - 15/07/2006 17:45
Avatar van vinTage Nieuw lid hoe bedoel je "buiten die for lus" ?

Ik weet niet wat je allemaal wilt doen natuurlijk, maar ipv tracen kan je toch gewoon "iets" doen met die naam ?
Of snap ik je niet ?
Offline Bertjuh - 15/07/2006 17:51 (laatste wijziging 15/07/2006 17:52)
Avatar van Bertjuh HTML interesse Als ik op een kaart klik, wil ik via een andere functie dat iets met die kaart gebeurt. In dit geval staat er op de kaart 'Omgeklapt = false'

Als ik op de kaart klik, moet komen te staan 'Omgeklapt = true'

Maar als ik dit doe:

  1. for( i = 0; i < aok.length; i++ ) {
  2. kaartRay[i] = _root.attachMovie("kaartHouder", "kaart"+i, _root.getNextHighestDepth(), {_x:X, _y:Y } );
  3. kaartRay[i].ingeklaptVeld.text = aok[i].isIngeklapt;
  4.  
  5. this["kaart"+i].onRelease = function() {
  6. kaartklik( this ); // this???
  7. }
  8. X = X + 200;
  9. }
  10. }
  11.  
  12. function kaartKlik( self ) {
  13. trace( self._name );
  14. }

wordt er niets meer getraced. Hij kent die 'this' buiten de for lus niet meer.

en ["kaart"+i] ... iets werkt daarbuiten ook niet meer, alleen met this ervoor.
Offline vinTage - 15/07/2006 19:45
Avatar van vinTage Nieuw lid bedoel je dan dit ?
Offline Bertjuh - 16/07/2006 10:53
Avatar van Bertjuh HTML interesse Dat bedoel ik ongeveer, maar nu is het te statisch.

Stel dat de computer een kaart uitkiest: nummer 5. Dan kan ik niet meer op kaart nr. 5 klikken en zorgen dat het spel dan zegt dat ik het juist heb geraden of niet. (Dat kan wel via een andere weg, bijv. een invoer veld, maar dat is niet wat ik zoek.)

Andere vraag: Kun je een aantal movieclips aanmaken (via dezelfde for-lus, deze op het beeld laten tonen, én in een array zetten? Zodat ik de kaarten met kaartRay[i] nog kan vinden?

Dit vindt hij niet echt vet:
- binnen for -

kaartRay[i] = _root.attachMovie("kaartHouder", "kaart"+i, _root.getNextHighestDepth(), {_x:X, _y:Y } );
kaartRay[i].waarde = i;

wat ik verder ook probeer te tracen, kaartRay[i].waarde of wat dan ook, hij blijft 'undefined'.

attachMovie zou een referentie naar de mc teruggeven.
Offline vinTage - 16/07/2006 11:53
Avatar van vinTage Nieuw lid zoiets ?

mss even refreshen, tot je een knop erbij ziet, die knop kiest een random nummer, als je dan op "bijbehorend" kaartnummer kiest zegt hij goed of fout..
Offline Bertjuh - 16/07/2006 13:35
Avatar van Bertjuh HTML interesse Zoiets is wel wat moet gebeuren. bedankt! Mijn doel is verder het aanmaken van de mc's en de controle van de klik te splitsen in verschillende functies. en dan krijg je een 'this' probleem.

iig bedankt voor de oplossing. A.d.h.v. jouw fla's heb ik een oplossing kunnen vinden. het werkt wel, maar ik ben niet tevreden met de code. (beetje vies: veel te veel zit nu in één functie.)

Ik zal verder proberen en testen, en je hoort me nog wel als ik er later echt niet meer uit kom.

Bedankt! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.22s