login  Naam:   Wachtwoord: 
Registreer je!
 Forum

controle of object bestaat. (Opgelost)

Offline lolll - 12/02/2010 16:52 (laatste wijziging 12/02/2010 16:54)
Avatar van lolllLid Mijn vorige "game" in flash is af. Waarvoor jullie dank al. Nu wil ik hem echter zo maken, dat als alle ballen op zijn, hij automatisch naar het volgende level ( frame ) gaat. ( Bij mijn vorige game, stond er een tijd op geplakt. Maar als je alle ballen hebt weggeklikt voordat de tijd om was, moest je nog wachten. Daarom wil ik nu een controle.) Ik heb al opgezocht, en heb al iets gevonden, alleen werkt het niet. Dit is mijn code nu ( het is een soort van test ( niet het echte bestand ) om te zien, hoe ik op objecten kan reageren als ze weg zijn. ) :
  1. import flash.events.*;
  2. tekst.text = "De 1ste bal is er.";
  3. tekst2.text = "De 2de bal is er.";
  4. bal.addEventListener(MouseEvent.CLICK, hit);
  5. bal2.addEventListener(MouseEvent.CLICK, hit);
  6. function hit (event:MouseEvent):void{
  7. if(bal){
  8. removeChild(getChildByName(event.currentTarget.name))
  9. bal.removeEventListener(MouseEvent.CLICK, hit);
  10. }else{
  11. tekst.text = "De 1ste bal is weg.";
  12. }
  13. if(bal2){
  14. removeChild(getChildByName(event.currentTarget.name))
  15. bal2.removeEventListener(MouseEvent.CLICK, hit);
  16. }else{
  17. tekst2.text = "De 2de bal is weg.";
  18. }
  19. }


De ballen verdwijnen, de eventlistener is weg, alleen past de tekst zich niet aan, er blijft bij de 2 ballen gewoon de tekst " de bal is er." staan. nochtans, als ik die code doorloop, en als ik de sites waar ik op gezocht heb moet geloven, zou alles perfect moeten gaan. Weet iemand wat hier fout is ?

14 antwoorden

Gesponsorde links
Offline vinTage - 12/02/2010 17:36 (laatste wijziging 12/02/2010 17:38)
Avatar van vinTage Nieuw lid jij maakt het allemaal wel heel ingewikkeld he 

je kan bij dit soort dynamische meuk veel beter ook de "ballen" dynamisch tonen, zo heb je altijd een referentie waarop je kan controleren (in plaats van hardcoded ballen maken op de scene)

Als je dat doet kan je gewoon een tellertje maken (var aantalBallen = 3) en die 3 kan je dus door je hele script gebruiken.
Na elke RAKE click doe je gewoon

  1. tellertje --
  2. if(tellertje <=0)
  3. {
  4. //einde game
  5. }


om dus "ballen" dynamisch op je scene te rammen kan je dit eens lezen/DOEN 

Offline lolll - 12/02/2010 20:44 (laatste wijziging 12/02/2010 20:57)
Avatar van lolll Lid owja, zo had ik nog niet gedacht. Jij bent echt wel goed in flash. Ik ga het direct proberen. Als jij niet had gereageerd (ook op mijn vorige topics.) zat ik nu nog te knoeien. Hiervoor erg bedankt !!    

EDIT :

Het lukt toch niet, er wijzigt niets. Het is toch zo dat je het bedoelde hé ?
  1. import flash.events.*;
  2. tekst.text = "De ballen zijn er.";
  3. var ballen = "3";
  4. bal.addEventListener(MouseEvent.CLICK, hit);
  5. bal2.addEventListener(MouseEvent.CLICK, hit);
  6. function hit (event:MouseEvent):void{
  7. removeChild(getChildByName(event.currentTarget.name))
  8. bal.removeEventListener(MouseEvent.CLICK, hit);
  9. removeChild(getChildByName(event.currentTarget.name))
  10. bal2.removeEventListener(MouseEvent.CLICK, hit);
  11. ballen --
  12. if(ballen<=0){
  13. tekst.text = "De ballen zijn weg.";
  14. }
  15. }
Offline vinTage - 12/02/2010 23:46
Avatar van vinTage Nieuw lid neen, nu "hardcode je nog steeds die ballen.

  1. var ballen:Number = 5;
  2. for(var i:Number = 0; i < ballen; i++)
  3. {
  4. var bal = ....
  5. bal.name = ....
  6. bal.addEventListener(.......)
  7. //etc
  8.  
  9. addChild(ball)
  10. }


zie ook addchild tutje
Offline lolll - 13/02/2010 08:49 (laatste wijziging 13/02/2010 10:51)
Avatar van lolll Lid ok, die tuto komt ook van pas ! Kan het nu niet direct proberen, maar zal het straks zeker doen.

Ik kom er niet echt uit. Op dit moment werkt het niet. Dit is nu mijn code :

  1. import flash.events.*;
  2. tekst.text = "De ballen zijn er.";
  3. var ballen:Number = 3;
  4. var bal = new bal();
  5. var bal2 = new bal();
  6. bal.x = Math.random();
  7. bal.y = Math.random();
  8. bal2.x = Math.random();
  9. bal2.y = Math.random();
  10. addChild(bal);
  11. addChild(bal2);
  12. bal.addEventListener(MouseEvent.CLICK, hit);
  13. bal2.addEventListener(MouseEvent.CLICK, hit);
  14. function hit (event:MouseEvent):void{
  15. for(var i:Number = 0; i < ballen; i++){
  16. removeChild(getChildByName(event.currentTarget.name))
  17. bal.removeEventListener(MouseEvent.CLICK, hit);
  18. removeChild(getChildByName(event.currentTarget.name))
  19. bal2.removeEventListener(MouseEvent.CLICK, hit);
  20. break;
  21. }
  22. tekst.text = "De ballen zijn weg.";
  23. }


Ik ga blijven zoeken, maar helaas, worden er geen ballen op het scherm weergegeven.
Offline vinTage - 13/02/2010 11:08 (laatste wijziging 13/02/2010 11:09)
Avatar van vinTage Nieuw lid waarom het niet lukt kan aan meerdere dingen liggen, maar wat je ook moet doen is alles in een forloopje zetten, anders is het NOG niet dynamisch.

  1. var ballen:Number = 3
  2. for(var i:Number = 0; i < ballen; i++)
  3. {
  4. var bal:Ball = new Ball();
  5. bal.name = "bal"+i
  6. bal.x = Math.random() * xxx;
  7. bal.y = Math.random()* xxx;
  8. bal.addEventListener(MouseEvent.CLICK, hit);
  9. addChild(bal);
  10. }
  11.  
  12. //Met dit stukje code heb je dus 3 ballen op de stage en hebben ook gelijk een listener mee gekregen
Offline lolll - 13/02/2010 11:24 (laatste wijziging 13/02/2010 11:28)
Avatar van lolll Lid Ok, ik snap alles. Alleen krijg ik deze foutmelding bij compilerfouten :

1180: Aanroep van een mogelijk niet-gedefinieerde methode Ball.

Het gaat om deze regel :
  1. var bal:Ball = new Ball(); //Die :Ball achter die var bal. Daar geeft hij die foutmelding over.


Edit :
Nu krijg ik deze foutmelding i.p.v. de vorige :

1046: Type niet gevonden of geen constante bij compilatie. bal.
Offline vinTage - 13/02/2010 11:32
Avatar van vinTage Nieuw lid check je classname van je bal
Offline lolll - 13/02/2010 13:08 (laatste wijziging 13/02/2010 13:11)
Avatar van lolll Lid Maar ik ben toch niet met klassen aan het werken ?
Ah, ok snap wat je bedoelt. De naam van die movieclip in de bibliotheek. Maar die is exact het zelfde.
Offline vinTage - 13/02/2010 13:46
Avatar van vinTage Nieuw lid Hoe is die dan?
Offline lolll - 13/02/2010 17:58 (laatste wijziging 15/02/2010 20:21)
Avatar van lolll Lid de naam van het symbool in de bibliotheek is "bal".
En in mijn code heb ik het ook naar "bal" veranderd. Zo dus :
  1. var ballen:Number = 3
  2. for(var i:Number = 0; i < ballen; i++)
  3. {
  4. var bal:bal = new bal();
  5. bal.name = "bal"+i
  6. bal.x = Math.random() * xxx;
  7. bal.y = Math.random()* xxx;
  8. bal.addEventListener(MouseEvent.CLICK, hit);
  9. addChild(bal);
  10. }

EDIT :
De bal geeft geen probleem meer, alleen krijg ik nu bij uitvoer dit te zien :
TypeError: Error #1007: Er is geprobeerd een instantie te maken op een element dat geen constructor is.
at testje_fla::MainTimeline/frame1()

Kan je mij een laatste keer hier bij helpen ?
Offline vinTage - 15/02/2010 21:13
Avatar van vinTage Nieuw lid Die 3 kruisjes na Math.random mss ..?

Offline lolll - 16/02/2010 11:01
Avatar van lolll Lid nee, die heb ik door 12 vervangen. ik krijg nog steeds bij uitvoer die foutmelding, ik weet echt niet wat ik verkeerd doe.
Offline vinTage - 16/02/2010 11:24
Avatar van vinTage Nieuw lid Nou, ik weet niet wat jij allemaal doet, maar met de door mij gegeven codes werkt het hier gewoon perfect...

  1. var ballen:Number = 3;
  2. for (var i:Number = 0; i < ballen; i++)
  3. {
  4. var bal:Ball = new Ball();
  5. bal.name = "bal" + i;
  6. bal.x = Math.random() * 400;
  7. bal.y = Math.random() * 400;
  8. bal.addEventListener (MouseEvent.CLICK, hit);
  9. addChild (bal);
  10. }
  11.  
  12. function hit (event:MouseEvent):void
  13. {
  14. removeChild (getChildByName(event.currentTarget.name));
  15. ballen--;
  16. if (ballen <= 0)
  17. {
  18. trace ("De ballen zijn weg.");
  19. }
  20. }
Bedankt door: lolll
Offline lolll - 16/02/2010 17:24 (laatste wijziging 16/02/2010 17:29)
Avatar van lolll Lid gelukt !!!
Ik had bij het symboolvenster, vergeten om op geavenceerd te klikken, en exporteren voor actionscript aan te vinken. Dit heb ik gelezen in die tuto ! Alles werkt nu perfect. Bedankt !
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.224s