As3 error #1009 cant find out - actionscript-3

Have been looking at this code for hours cant find out whats wrong :X
please somebody help me figure this out im going crazy
I still have a huge problem i go to the frame 1 and i see the frame 3 on background still running... and when the game restarts ships and stuff still there idk how to "restart" that :/
/* Código que pára a timeline na 1 frame para que o menu continue apresentado*/
stop();
import flash.text.Font;
Font.registerFont(space);
/*Movimenta a nave fazendo a seguir os movimentos do rato e esconde o cursor do sistema operacional*/
addEventListener( Event.ENTER_FRAME, gameLoop );
// create the array for the bullets
var bullets:Array = [];
// create the array for the enemies
var enemies:Array = [];
var pontos=0;
var toma:TOMA = new TOMA();
stage.addChild(arma_tiro);
arma_tiro.mouseEnabled = false;
arma_tiro.addEventListener(Event.ENTER_FRAME, fl_CustomMouseCursor);
function fl_CustomMouseCursor(event:Event)
{
arma_tiro.x = stage.mouseX;
}
Mouse.hide();
/* Mouse Click Event
Clicking on the specified symbol instance executes a function in which you can add your own custom code.
Instructions:
1. Add your custom code on a new line after the line that says "// Start your custom code" below.
The code will execute when the symbol instance is clicked.
*/
stage.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler_3);
function fl_MouseClickHandler_3( event:MouseEvent ):void
{
toma.play();
// create the bullet
var bullet:bullet_ = new bullet_();
addChild(bullet);
bullet.x=arma_tiro.x;
bullet.y=arma_tiro.y;
// add the bullet to the bullets array
bullets.push(bullet);
bullet.addEventListener(Event.ENTER_FRAME, moverbala);
}
function moverbala(event:Event):void // função para mover a bala para cima */
{
event.target.y=event.target.y-20;
}
//stage.addEventListener(Event.ENTER_FRAME, Primeira);
setInterval(Primeira, 1500) ; //define intervalo de tempo entre as varias repetiçoes da funçao
function Primeira():void
{
var invader1:invader_1 = new invader_1();
addChild(invader1);
invader1.x=0;
invader1.y=120;
enemies.push( invader1 );
invader1.addEventListener(Event.ENTER_FRAME, mover1);
}
function mover1(event:Event):void
{
event.target.x+= -9;
}
//Nave 2
setInterval(Segunda, 750) ; //define intervalo de tempo entre as varias repetiçoes da funçao
function Segunda():void
{
var invader2:invader_2 = new invader_2();
addChild(invader2);
invader2.x=0;
invader2.y=85;
enemies.push( invader2 );
invader2.addEventListener(Event.ENTER_FRAME, mover2);
}
function mover2(event:Event):void // função para mover a nave para lado direito */
{
event.target.x+=-5;
}
//Nave 3
setInterval(Terceira, 1000) ; //define intervalo de tempo entre as varias repetiçoes da funçao
function Terceira():void
{
var invader3:invader_3 = new invader_3();
addChild(invader3);
invader3.x=0;
invader3.y=45;
enemies.push( invader3 );
invader3.addEventListener(Event.ENTER_FRAME, mover3);
}
function mover3(event:Event):void // função para mover a nave para lado direito */
{
event.target.x+=-3;
}
//bonus
setInterval(bonus, 7500) ; //define intervalo de tempo entre as varias repetiçoes da funçao
function bonus():void
{
var bonus:bonus_1 = new bonus_1();
addChild(bonus);
bonus.x=0;
bonus.y=15;
enemies.push(bonus);
bonus.addEventListener(Event.ENTER_FRAME, mover4);
}
function mover4(event:Event):void // função para mover a nave para lado direito */
{
event.target.x+=-5;
}
function gameLoop(event:Event):void
{
var firstLoop:Boolean = true;
// loop to move/remove the bullets
for( var a:int = bullets.length-1; a>=0; a-- )
{
bullets[a].y -= 20;
// if the bullet is not on screen anymore, remove it from array
if( bullets[j].y < 0 )
{
removeChild( bullets[a] );
bullets.splice(a,1);
continue;
}
}
// loop enemies
for( var i:int = enemies.length-1; i>=0; i-- )
{
// move the enemy
enemies[i].x += 10;
// loop the bullets to see if on collide the enemy
for( var j:int = bullets.length-1; j>=0; j-- )
{
// test collision with the enemy
if( enemies[i].hitTestObject( bullets[j] ))
{
// make your enemy dead
removeChild( enemies[i] );
pontos++;
// remove it from the array
enemies.splice(i,1);
pontox.text = String(pontos);
}
}
}
}
/* Countdown Timer
Counts down from a specified number of seconds.
Instructions:
1. To change the length of the countdown, change the value 10 in the first line below to the number of seconds you want.
*/
pontoss.text= "pontos";
tempos.text = "tempo";
var fl_SecondsToCountDown:Number = 30;
var fl_CountDownTimerInstance:Timer = new Timer(1000, fl_SecondsToCountDown);
fl_CountDownTimerInstance.addEventListener(TimerEvent.TIMER, fl_CountDownTimerHandler);
fl_CountDownTimerInstance.start();
function fl_CountDownTimerHandler(event:TimerEvent):void
{
if (fl_SecondsToCountDown >1)
{
tempo.text = String(fl_SecondsToCountDown);
fl_SecondsToCountDown--;
};
if (fl_SecondsToCountDown == 2)
{
stop();
gotoAndStop(1);
};
}

Don't you intend to stop the timer?
So perhaps you meant fl_CountDownTimerInstance.stop(); instead of stop()..
//..
if (fl_SecondsToCountDown == 2)
{
fl_CountDownTimerInstance.stop();
gotoAndStop(1);
};
}
//..

Related

AS3 get variable from root timeline

i have this code on my main swf :
var btnLingua : Array = new Array(ITA,DE,LAT,EL);
var lingua:String = "ITA";
for(var i:int=0;i<btnLingua.length;i++){
btnLingua[i].addEventListener(MouseEvent.CLICK,settaLingua);
}
function settaLingua(event:MouseEvent){
trace("la lingua selezionata è : " + event.target.name);
lingua=event.target.name;
caricamento("scenaProva.swf");
}
var fl_Loader:Loader;
function caricamento(myURL:String):void {
if(fl_Loader != null){
contenitore.removeChild(fl_Loader);
fl_Loader.unloadAndStop();
fl_Loader = null;
}
fl_Loader = new Loader();
fl_Loader.load(new URLRequest(myURL));
fl_Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, caricamentoCompleto);
}
function caricamentoCompleto(e:Event):void {
contenitore.addChild(fl_Loader);
fl_Loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, caricamentoCompleto);
}
and this on the movieClip :
trace("numero di elementi nella pagina : "+numChildren);
trace(MovieClip(root).lingua);
var lingua : String = MovieClip(root).lingua;
for(var i:int = 0; i<numChildren; i++)
{
var e:Object = getChildAt(i);
if(e.name.indexOf("$"+lingua) >= 0){
e.visible = true;
trace(e.name + " contiene il carattere di linguaggio");
}
else if(e.name.indexOf("$") >= 0){
e.visible = false;
}
}
when i try to get the variable lingua from my root movieclip i recive "UNDEFINED"
please can someone help me? i'm trying by 2 days...
sorry for bad english, i'm italian
You don't have a variable lingua in your main timeline, you have btnLingua and ling.
I dont think in your Child SWF you can use the line:
var lingua : String = MovieClip(root).lingua;
because that code will run before even the Child SWF has been added to the stage (Flash must do the first code to know what to show you).
So try something like...
var lingua : String = "";
addEventListener(Event.ADDED_TO_STAGE, onReady);
function onReady (evt : Event) : void
{
trace("numero di elementi nella pagina : " + numChildren);
//trace(MovieClip(root).lingua);
lingua = this.parent.parent.lingua; //update string
for(var i:int = 0; i<numChildren; i++)
{
var e:Object = getChildAt(i);
if(e.name.indexOf("$"+lingua) >= 0)
{
e.visible = true;
trace(e.name + " contiene il carattere di linguaggio");
}
else if(e.name.indexOf("$") >= 0)
{ e.visible = false; }
}
}

AS3: Part of code doesnt get executed

So, I need to remove my frog, from a small flash game, after 3 times moving, I'm trying to do this with 'aantalGezwommen' and a function, sadly it doesn't work with the code now.
I can't figure it out, any of you got an idea?
I have included the whole code, so if something else is wrong, please tell :)
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.geom.Point;
public class KikkerOgen extends MovieClip {
var timer:Timer = new Timer(1000, 4);
var geknipperd:int = 0;
var hoevaakKnipperen:int = 0;
var aantalGezwommen:int = 0;
var score:int = 0;
//boompjes en bosjes
var object_1:Point = new Point(57,84);
var object_2:Point = new Point(500,86);
var object_3:Point = new Point(46,168);
var object_4:Point = new Point(479,126);
var object_5:Point = new Point(69,159);
var object_6:Point = new Point(443,162);
var object_7:Point = new Point(248,316);
var object_8:Point = new Point(209,198);
var object_9:Point = new Point(163,357);
var object_10:Point = new Point(440,283);
//constructor
public function KikkerOgen()
{
addEventListener(Event.ENTER_FRAME, Update);
addEventListener(MouseEvent.CLICK, isClicked);
timer.addEventListener(TimerEvent.TIMER, Knipperen);
timer.start();
gotoAndStop(13);
}
public function Update (event:Event)
{
trace(currentFrame);
}
//Score moet bij deze functie omhoog - document class
public function isClicked (event:MouseEvent):void
{
this.parent.removeChild(this);
}
//Hier telt hij het aantal keren dat de kikker moet knipperen
function Knipperen (event:TimerEvent):void
{
if (event.currentTarget.currentCount >= 2 && geknipperd < 3) {
geknipperd ++;
gotoAndPlay(1);
}
//Wanneer de kikker 3x geknipperd heeft moet hij naar een nieuwe positie
if (geknipperd == 3)
{
//Selecteer een random positie om heen te zwemmen
switch(Math.round(Math.random() * 10))
{
case 1:
x = object_1.x;
y = object_1.y;
break;
case 2:
x = object_2.x;
y = object_2.y;
break;
case 3:
x = object_3.x;
y = object_3.y;
break;
case 4:
x = object_4.x;
y = object_4.y;
break;
case 5:
x = object_5.x;
y = object_5.y;
break;
case 6:
x = object_6.x;
y = object_6.y;
break;
case 7:
x = object_7.x;
y = object_7.y;
break;
case 8:
x = object_8.x;
y = object_8.y;
break;
case 9:
x = object_9.x;
y = object_9.y;
break;
case 10:
x = object_10.x;
y = object_10.y;
break;
}
trace("posX:"+x);
trace("posY:"+y);
//Reset de timmer, het knipperen en laat hem opnieuw tellen om te verplaatsen.
geknipperd = 0;
trace(geknipperd);
//Tel hoevaak het kikkertje verplaatst is om de kikker bij 3x van stage te verwijderen.
if (aantalGezwommen < 3) {
aantalGezwommen++;
}
timer.reset();
timer.start();
}
}
//Wanneer de kikker 3x is verplaats verwijder hem uit het spel
function removeKikker ()
{
if (aantalGezwommen == 3)
{
this.parent.removeChild(this);
}
}
}
}
Apologies for the Dutch notes, things I need to remember :)
Nowhere in your code you are calling the removeKikker function. For a function to run it has to be called.

AS3: Reset variables and repeat part of function

This is a class of my schoolproject but it doesn't work right now. http://pastebin.com/0K9H6wAi
I have a frog who blinks 3 times and than moves - so far, so good.
But when it has moves it has to blink again and move again, and i cant figure this out. This happens in line 109 till the end.
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.geom.Point;
public class KikkerOgen extends MovieClip {
var timer:Timer = new Timer(1000, 4);
var geknipperd:int = 0;
var hoevaakKnipperen:int = 0;
var aantalGezwommen
var score:int = 0;
//boompjes en bosjes
var object_1:Point = new Point(57,84);
var object_2:Point = new Point(500,86);
var object_3:Point = new Point(46,168);
var object_4:Point = new Point(479,126);
var object_5:Point = new Point(69,159);
var object_6:Point = new Point(443,162);
var object_7:Point = new Point(248,316);
var object_8:Point = new Point(209,198);
var object_9:Point = new Point(163,357);
var object_10:Point = new Point(440,283);
//constructor
public function KikkerOgen()
{
addEventListener(Event.ENTER_FRAME, Update);
addEventListener(MouseEvent.CLICK, isClicked);
timer.addEventListener(TimerEvent.TIMER, Knipperen);
timer.start();
gotoAndStop(13);
}
public function Update (event:Event)
{
trace(currentFrame);
}
//Score moet bij deze functie omhoog - document class
public function isClicked (event:MouseEvent):void
{
this.parent.removeChild(this);
}
//Hier telt hij het aantal keren dat de kikker moet knipperen
function Knipperen (event:TimerEvent):void
{
if (event.currentTarget.currentCount >= 2 && geknipperd < 3) {
geknipperd ++;
gotoAndPlay(1);
}
//Wanneer de kikker 3x geknipperd heeft moet hij naar een nieuwe positie
if (geknipperd == 3)
{
//Selecteer een random positie om heen te zwemmen
switch(Math.round(Math.random() * 10))
{
case 1:
x = object_1.x;
y = object_1.y;
break;
case 2:
x = object_2.x;
y = object_2.y;
break;
case 3:
x = object_3.x;
y = object_3.y;
break;
case 4:
x = object_4.x;
y = object_4.y;
break;
case 5:
x = object_5.x;
y = object_5.y;
break;
case 6:
x = object_6.x;
y = object_6.y;
break;
case 7:
x = object_7.x;
y = object_7.y;
break;
case 8:
x = object_8.x;
y = object_8.y;
break;
case 9:
x = object_9.x;
y = object_9.y;
break;
case 10:
x = object_10.x;
y = object_10.y;
break;
}
trace("posX:"+x);
trace("posY:"+y);
//Reset de timmer, het knipperen en laat hem opnieuw tellen om te verplaatsen.
geknipperd = 0;
trace(geknipperd);
timer.reset();
aantalGezwommen ++;
}
}
//Wanneer de kikker 3x is verplaats verwijder hem uit het spel
function removeKikker ()
{
if (aantalGezwommen == 3)
{
this.parent.removeChild(this);
}
}
}
}
Any idea what goes wrong here?
You call timer.reset(); which stops the timer but doesn't start it again.
Stops the timer, if it is running, and sets the currentCount property back to 0, like the reset button of a stopwatch.
Timer # AS3 reference
After you reset the timer, be sure to start it again with timer.start();

AS3 - Draggable squares generate from an Array

Good Morning,
I have a grid (bankgrid) generated by a var bankArray:Array who takes Array's value to show by a gotoAndStop(that number (f)) a colorful grid.
All squares are children from the same MovieClip(TBank) generates one after one with horizontal(i) and vertical (j) position in the Array.
I'm trying to make there squares draggable... in vain :
var bankgrille:MovieClip = new MovieClip();
var bankList:Vector.<TBank> = new Vector.<TBank>();
var bankArray:Array = [
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,1,0,0,0,0,0],
[0,0,2,0,1,0,0,0],
[0,2,2,2,2,0,0,0],
[0,1,2,2,1,0,0,0],
[0,2,1,1,2,1,1,0]
];
var bankstock:Array = [
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]
];
function colorBank():void {
for (var i:int=0; i<8; i++){ // boucle sur les 20 colonnes
for (var j:int=0; j<8; j++){ // boucle sur les 15 lignes de chaque colonne
var f:int = bankArray[j][i] // valeur de la case
if(f > 0)
{ // si la valeur de la case est supérieure à 0
var tBank:TBank = new TBank()
bankList.push(tBank);
// création du modèle
tBank.x = 320+i*20; // position sur X
tBank.y = 100+j*20; // position sur Y
tBank.gotoAndStop(f);
bankgrille.addChild(tBank);
}
else
{
bankstock[j][i] = []
}
}
}
}
colorBank();
addChild(bankgrille);
My future project (to maybe make my question more senseful) :
'After that, I'd like to permit to drag there squares and drop them on another Array to change second one colours'
startDrag() is a good place to start when it comes to dragging movie clips.
You can assign a MouseEvent listener to the entire grid and drag a specific element using event.currentTarget:
bankgrille.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
bankgrille.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
function onMouseDown(e:MouseEvent):void
{
e.currentTarget.startDrag();
}
function onMouseUp(e:MouseEvent):void
{
e.currentTarget.stopDrag();
}
And Voilà ! Thank you again Sim !
var bankgrille:MovieClip = new MovieClip();
var bankList:Vector.<TBank> = new Vector.<TBank>();
var bankArray:Array = [
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,1,0,0,0,0,0],
[0,0,2,0,1,0,0,0],
[0,2,2,2,2,0,0,0],
[0,1,2,2,1,0,0,0],
[0,2,1,1,2,1,1,0]
];
var bankstock:Array = [
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0]
];
function colorBank():void {
for (var i:int=0; i<8; i++){ // boucle sur les 20 colonnes
for (var j:int=0; j<8; j++){ // boucle sur les 15 lignes de chaque colonne
var f:int = bankArray[j][i] // valeur de la case
if(f > 0)
{ // si la valeur de la case est supérieure à 0
var tBank:TBank = new TBank()
bankList.push(tBank);
// création du modèle
tBank.x = 320+i*20; // position sur X
tBank.y = 100+j*20; // position sur Y
tBank.gotoAndStop(f);
bankgrille.addChild(tBank);
}
else
{
bankstock[j][i] = []
}
}
}
}
colorBank();
addChild(bankgrille);
draggable();
function draggable()
{
for each(var t:TBank in bankList)
{
t.addEventListener(MouseEvent.MOUSE_DOWN, clik);
t.addEventListener(MouseEvent.MOUSE_UP, lache);
var posX=t.x;
if (t.x != posX)
{
t.x = posX;
}
function clik(e:MouseEvent):void
{
e.currentTarget.startDrag();
}
function lache(e:MouseEvent):void
{
e.currentTarget.stopDrag();
}
}
}

Error #2025 with my memory game AS3

I've been busy with creating a memory game (card matching), but I've come across a bug which I have to solve before wednesday as it is a project for my school.
I've tried alot of ways to try and fix this problem, but as this is the first AS3 script that I have ever written I don't know a way to solve it.
The error occurs when I match 1 pair of cards and the timer runs out of time or you win.
Detailed error report:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
at flash.display::DisplayObjectContainer/removeChild()
at main/lose()[C:\Users\Remy\Desktop\Schoolmap\FLASH\memory1_0\main.as:253]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.utils::Timer/tick()
And here is my oh so sloppy script ;)
package
{
// hier import ik de benodigde items.
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.TimerEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.utils.Timer;
import flash.events.MouseEvent;
import flash.events.Event;
/**
* #author Remy&Mark
*/
public class main extends MovieClip
{
hier initialize ik de var's.
var kaart1:MovieClip;
var kaarten:Array; // ARRAY is een table.
var pause_timer:Timer; // Timer voor tijd dat kaarten terug worden gedraaid.
var kaart1open:Boolean; // benodige booleans en nummers
var kaart2open:Boolean;
var kaart1value:Number;
var kaart2value:Number;
var kaart1id:Number;
var kaart2id:Number;
var cardsRemoved:Number;// einde
var button:Sprite;// dit is de button
var values:Array; //just declare it here, instead of initializing it here
var startknop:MovieClip = new startKnop(); // maakt de startknop
var tryAgain:MovieClip = new taKnop(); // try again.
var score:TextField = new TextField(); // score textfield
var result:TextField = new TextField(); // WIN of LOSE.
var format:TextFormat = new TextFormat();
var streak:Number;
var bonus:Number;
var klok:MovieClip = new clock();
var gameTimer:Timer = new Timer(1000,8);
var retry:Boolean = false; // dit duidt aan of het voor het eerst begint of dat het wordt geretried.
var win_timer:Timer;
//einde
public function main()
{
// dit maakt de startknop
startknop.x = 100;
startknop.y = 200;
startknop.buttonMode = true;
startknop.useHandCursor = true;
startknop.mouseChildren = false;
addChild(startknop);
addEventListener(MouseEvent.CLICK, startGame);
// einde
}
// deze code word opgeroepen om de game op te zetten en sommige variables goed in te stellen.
private function startGame(e:MouseEvent):void
{
gameTimer.reset();
result.text = "";
values = new Array(2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10);
bonus = 0;
streak = 0;
if (retry == false)
{
removeChild(startknop);
} else {
removeChild(tryAgain);
}
// score
score.x = 250;
score.y = 30;
score.width = 250;
score.selectable = false;
score.text = "Score: 0";
//score.
format.size = 40;
score.setTextFormat(format);
addChild(score);
// einde
// game klok
klok.x = 625;
klok.y = 100;
addChild(klok);
gameTimer.addEventListener(TimerEvent.TIMER_COMPLETE, lose);
gameTimer.addEventListener(TimerEvent.TIMER, tick);
gameTimer.start();
// einde
legKaarten();
removeEventListener(MouseEvent.CLICK,startGame);
}
// Hier worden de kaarten op het bord gelegd en krijgen ze een random variable.
private function legKaarten()
{
cardsRemoved = 0;
kaart1open = false;
kaart2open = false;
kaart1value = 0;
kaart2value = 0;
kaart1id = 0;
kaart2id = 0;
kaarten = new Array(); // je roept hier een lege Array(table) op.
for (var i:int = 0; i <= 17; i++ ) // (int)eger is een afgerond getal. ( geen decimalen)
{
var real:int = i;
var kolom:int = i;
var rij:int = 0;
kaarten.push(new Kaart1());
addChild(kaarten[i]);
kaarten[i].stop();
// hier worden de kolommen en rijen ingesteld.
if ( real > 5&&real <= 11)
{
rij++;
kolom = i - 6;
}
if ( real > 11)
{
rij = rij + 2;
kolom = i - 12;
}
//einde
var randIndex:int = Math.floor(Math.random() * (values.length - 1)) // hier worden de values geconfigureerd
kaarten[i].id = i;
kaarten[i].value = values[randIndex]; // dit geeft een kaart een random value uit de Array.
values.splice(randIndex, 1);
kaarten[i].x = 200+(kolom * 80);
kaarten[i].y = 100 + (rij * 150);
kaarten[i].width = 75;
kaarten[i].height = 125;
kaarten[i].addEventListener(MouseEvent.CLICK, omdraaien);
}
}
// deze functie draait de kaarten om om te kijken of de kaarten matchen.
private function omdraaien(e:MouseEvent):void
{
var geklikteKaart:MovieClip = e.currentTarget as MovieClip; //e.target is de klik target.
if (geklikteKaart.currentFrame == 1 && kaart1open == false)
{
if (kaart1open == false)
{
geklikteKaart.gotoAndStop(geklikteKaart.value);
kaart1open = true;
kaart1value = geklikteKaart.value;
kaart1id = geklikteKaart.id;
}
}
else if(geklikteKaart.currentFrame == 1 && kaart1open == true && kaart2open == false)
{
geklikteKaart.gotoAndStop(geklikteKaart.value);
kaart2open = true;
kaart2value = geklikteKaart.value;
kaart2id = geklikteKaart.id;
}
if (kaart1open == true && kaart2open == true && kaart1value == kaart2value)
{
pause_timer = new Timer(250, 1);
pause_timer.addEventListener(TimerEvent.TIMER_COMPLETE, removeKaarten);
pause_timer.start();
}
else if (kaart1open == true && kaart2open == true && kaart1value != kaart2value)
{
pause_timer = new Timer(250, 1);
pause_timer.addEventListener(TimerEvent.TIMER_COMPLETE, resetKaarten);
pause_timer.start();
}
}
private function removeKaarten(e:TimerEvent):void
{
removeChild(kaarten[kaart1id]);
removeChild(kaarten[kaart2id]);
streak ++;
cardsRemoved ++;
kaart1open = false;
kaart2open = false;
kaart1value = 0;
kaart2value = 0;
kaart1id = 0;
kaart2id = 0;
if (streak > 1)
{
bonus = bonus + 50;
}
if (cardsRemoved == 9)
{
gameTimer.stop();
win_timer = new Timer(500, 1);
win_timer.addEventListener(TimerEvent.TIMER_COMPLETE, win);
win_timer.start();
pause_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, resetKaarten);
gameTimer.removeEventListener(TimerEvent.TIMER,tick);
}
else if (gameTimer.currentCount == 60)
{
gameTimer.removeEventListener(TimerEvent.TIMER,tick);
}
score.selectable = false;
score.text = "Score: " + (cardsRemoved * 100 + bonus);
format.size = 40;
score.setTextFormat(format);
//pause_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, removeKaarten);
}
private function resetKaarten(e:TimerEvent):void
{
kaarten[kaart1id].gotoAndStop(1);
kaarten[kaart2id].gotoAndStop(1);
kaart1open = false;
kaart2open = false;
kaart1value = 0;
kaart2value = 0;
kaart1id = 0;
kaart2id = 0;
streak = 0;
pause_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, resetKaarten);
}
private function tick(e:TimerEvent):void
{
klok.wijzer.rotation += 360 / gameTimer.repeatCount;
}
private function lose(e:TimerEvent):void
{
retry = true;
removeChild(klok);
removeChild(score);
// tekst voor verlies
result.x = 300;
result.y = 150;
result.width = 250;
result.selectable = false;
result.text = "YOU SUCK!";
format.size = 40;
result.setTextFormat(format);
addChild(result);
// einde
// dit maakt de try again knop.
tryAgain.x = 100;
tryAgain.y = 200;
tryAgain.buttonMode = true;
tryAgain.useHandCursor = true;
tryAgain.mouseChildren = false;
addChild(tryAgain);
addEventListener(MouseEvent.CLICK, startGame);
// einde
// hier worden de kaarten verwijderd.
for (var r:int = 0; r < 18; r++)
{
removeChild(kaarten[r]);
values.splice(kaarten[r], 1)
}
//einde
}
private function win(e:TimerEvent):void
{
retry = true;
removeChild(klok);
removeChild(score);
// tekst voor verlies
result.x = 200;
result.y = 150;
result.width = 550;
result.selectable = false;
result.text = "YOU ARE A WINNER!";
format.size = 40;
result.setTextFormat(format);
addChild(result);
// einde
// dit maakt de try again knop.
tryAgain.x = 100;
tryAgain.y = 200;
tryAgain.buttonMode = true;
tryAgain.useHandCursor = true;
tryAgain.mouseChildren = false;
addChild(tryAgain);
addEventListener(MouseEvent.CLICK, startGame);
// einde
// hier worden de kaarten verwijderd.
for (var r:int = 0; r < 18; r++)
{
if (kaarten[r].value != null)
{
removeChild(kaarten[r]);
values.splice(kaarten[r], 1)
}
}
//einde
}
}
}
When removing a DisplayObject from an DisplayObjectContainer you will get an error if the object you are trying to remove is null or not a child. You need to test for this.
The following example loops through the "karten" array, checks if each object exists and whether it's a child of this. If so, it removes the child, otherwise it does nothing before moving to the next item in the array.
for (var i:int = 0; i < kaarten.length; i++) {
if (kaarten[i] && this.contains(kaarten[i])) {
this.removeChild(kaarten[i]);
}
}