[flash AS3] klikevents bij objecten in een array willekeurig

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goedemiddag

Momenteel ben ik bezig een soort "memory"-game te maken in Flash. Hiervoor heb ik een movieclip met daarin 2 cardholders, waarin een tween-animatie verwerkt wordt. De movieclip (Card) heeft ook een base class, Kaart, die overerft van MovieClip.

a.d.h.v. een for-loopje plaats ik mijn 20 movieclips on-stage:
code:
1
2
3
4
5
6
7
movieclips[i] = new Card();
                movieclips[i].card = no;
                movieclips[i].LoadImgs();
                movieclips[i].x = 40+(113*(i-j*5));
                movieclips[i].y = 40+(132*Math.floor(j));
                stage.addChild(movieclips[i]);
                movieclips[i].stop();


waarbij in de movieclip zelf een event-listener aangemaakt wordt:
code:
1
2
3
public function Kaart() {
            this.addEventListener(MouseEvent.CLICK, Flip);
        }


Het probleem is nu echter dat, wanneer ik bv op kaart 1 klik, bv kaart 6 omgedraaid wordt. Of kaart 2. Soms wordt ook de kaart zelf omgedraaid. Het is dus allemaal vrij willekeurig... Iemand een idee hoe dit op te lossen valt?

Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

Kan je de functie Flip ook laten zien?

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jazeker:

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public function Flip(evt:MouseEvent):void {
            addEventListener(Event.ENTER_FRAME, this.detectEnd);
            removeEventListener(MouseEvent.CLICK, Flip);
        }
        
        private function detectEnd(evt:Event):void {
            if(this.currentFrame == this.totalFrames && forward) {
                removeEventListener(Event.ENTER_FRAME, this.detectEnd);
                gotoAndStop(this.currentFrame);
                forward = !forward;
                addEventListener(MouseEvent.CLICK, Flip);
            } else if(this.currentFrame == 1 && !forward) {
                removeEventListener(Event.ENTER_FRAME, this.detectEnd);
                forward = !forward;
                addEventListener(MouseEvent.CLICK, Flip);
            } else if(forward) {
                nextFrame();
            } else {
                prevFrame();
            }
        }


Ik heb uiteraard al op google gezocht, maar er is niet echt veel te vinden ivm arrays van objecten die de mist in gaan met eventhandlers... |:(

[ Voor 9% gewijzigd door Verwijderd op 15-03-2010 11:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, nu voel ik me stom. Ik had nog een textfield, dat was eigenlijk om ervoor te zorgen dat de "klik" opgevangen werd. Nu heb ik de textfields eens verwijderd (onder het mom van je moet je fla netjes houden), blijkt alles mooi te werken...

Iedereen die gekeken heeft, heel erg bedankt voor de moeite! _/-\o_

Topic mag wat mij betreft dus op slot :)

Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Ik begrijp niet helemaal waarom je de event listeners verwijderd en weer registreert. De property currentTarget in de MouseEvent moet je huidige aangeklikte item weergeven. Als je FlexBuilder hebt of een ander geschikte IDE dan kun je dit debuggen. Komt het huidige item overeen met het geklikte item?

In je code heb je het over this.CurrentFrame wil je niet het frame weten van je huidige aangeklikte kaart?

Ik neem aan dat je een Sliding Tile Puzzle bedoeld in plaats van Memory.

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee, bij Memory is het de bedoeling om 2 kaarten te vergelijken met elkaar he...

Ik verwijder de event listener opdat het niet mogelijk is om het spel "te verwarren" door 5x te klikken oid op de kaart.

@Spiral: het kwam dus door een tekstveld dat geen instancename had in mijn movieclips :X

[ Voor 18% gewijzigd door Verwijderd op 15-03-2010 19:41 ]

Pagina: 1