Error #2025 with my memory game AS3 - actionscript-3

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]);
}
}

Related

actionscript Storing a value after a button is clicked

I don't program a lot. Sometimes I program a bit of Actionscript 3. Now I wanted to create an flash enviroment where people can click on buttons and play a video. I think I almost figured it out with the following script:
public class main extends MovieClip
{
private var drukknop1:knopje;
private var drukknop2:knopje;
private var drukknop3:knopje;
private var drukknop4:knopje;
private var drukknop5:knopje;
private var drukknop6:knopje;
private var drukknop7:knopje;
private var drukknop8:knopje;
private var drukknop9:knopje;
private var drukknop10:knopje;
private var videoclip:FLVPlayback = new FLVPlayback();
private var buttonClicked:Number = 0;
public function main()
{
// plaatsen van buttons on stage
drukknop1 = new knopje();
drukknop1.name = "inst_knop1";
drukknop1.x = 50;
drukknop1.y = 70;
addChild(drukknop1);
drukknop1.buttonMode = true;
drukknop1.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop1.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop2 = new knopje();
drukknop2.name = "inst_knop2";
drukknop2.x = 150;
drukknop2.y = 70;
addChild(drukknop2);
drukknop2.buttonMode = true;
drukknop2.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop2.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop3 = new knopje();
drukknop3.name = "inst_knop3";
drukknop3.x = 250;
drukknop3.y = 70;
addChild(drukknop3);
drukknop3.buttonMode = true;
drukknop3.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop3.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop4 = new knopje();
drukknop4.name = "inst_knop4";
drukknop4.x = 350;
drukknop4.y = 70;
addChild(drukknop4);
drukknop4.buttonMode = true;
drukknop4.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop4.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop5 = new knopje();
drukknop5.name = "inst_knop5";
drukknop5.x = 450;
drukknop5.y = 70;
addChild(drukknop5);
drukknop5.buttonMode = true;
drukknop5.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop5.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop6 = new knopje();
drukknop6.name = "inst_knop6";
drukknop6.x = 550;
drukknop6.y = 70;
addChild(drukknop6);
drukknop6.buttonMode = true;
drukknop6.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop6.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop7 = new knopje();
drukknop7.name = "inst_knop7";
drukknop7.x = 650;
drukknop7.y = 70;
addChild(drukknop7);
drukknop7.buttonMode = true;
drukknop7.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop7.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop8 = new knopje();
drukknop8.name = "inst_knop8";
drukknop8.x = 750;
drukknop8.y = 70;
addChild(drukknop8);
drukknop8.buttonMode = true;
drukknop8.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop8.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop9 = new knopje();
drukknop9.name = "inst_knop9";
drukknop9.x = 850;
drukknop9.y = 70;
addChild(drukknop9);
drukknop9.buttonMode = true;
drukknop9.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop9.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
drukknop10 = new knopje();
drukknop10.name = "inst_knop10";
drukknop10.x = 950;
drukknop10.y = 70;
addChild(drukknop10);
drukknop10.buttonMode = true;
drukknop10.addEventListener(MouseEvent.MOUSE_UP, _flv_component);
drukknop10.addEventListener(MouseEvent.MOUSE_DOWN, ButtonClicked);
}
private function _flv_component(event:MouseEvent):void
{
//plaatsen van de video player door drukken op de knop
drukknop1.buttonMode = false;
drukknop1.removeEventListener(MouseEvent.MOUSE_UP, _flv_component);
videoclip.x = (stage.stageWidth/2)-(videoclip.width/2);
videoclip.y = (stage.stageHeight/2)-(videoclip.height/2);
videoclip.width = 640;
videoclip.height = 400;
videoclip.autoPlay = true;
videoclip.skin = "MinimaSilverPlayBackSeekMute.swf";
if(buttonClicked ==1)
{videoclip.load("Functieomschrijvingscene.flv");}
else if(buttonClicked ==2)
{videoclip.load("2.flv");}
else if(buttonClicked ==3)
{videoclip.load("3.flv");}
else if(buttonClicked ==4)
{videoclip.load("4.flv");}
else if(buttonClicked ==5)
{videoclip.load("5.flv");}
else if(buttonClicked ==6)
{videoclip.load("6.flv");}
else if(buttonClicked ==7)
{videoclip.load("7.flv");}
else if(buttonClicked ==8)
{videoclip.load("8.flv");}
else if(buttonClicked ==9)
{videoclip.load("9.flv");}
else if(buttonClicked ==10)
{videoclip.load("10.flv");}
videoclip.play();
addChild(videoclip);
videoclip.addEventListener(Event.COMPLETE,videoComplete);
}
function videoComplete(event:Event):void
{
//Verwijderen van FLVPlayback component
trace ("video is klaar");
removeChild(videoclip);
buttonClicked = 0;
trace (buttonClicked);
}
function ButtonClicked(Event:MouseEvent):void
{
trace ("ButtonClicked functie werkt.");
trace (buttonClicked);
// het opslaan van een nummer van een button
if(event.target.name == drukknop1)
{buttonClicked = 1;}
else if(event.target.name == drukknop2)
{buttonClicked = 2;}
else if(event.target.name == drukknop3)
{buttonClicked = 3;}
else if(event.target.name == drukknop4)
{buttonClicked = 4;}
else if(event.target.name == drukknop5)
{buttonClicked = 5;}
else if(event.target.name == drukknop6)
{buttonClicked = 6;}
else if(event.target.name == drukknop7)
{buttonClicked = 7;}
else if(event.target.name == drukknop8)
{buttonClicked = 8;}
else if(event.target.name == drukknop9)
{buttonClicked = 9;}
else if(event.target.name == "inst_knop10")
{buttonClicked = 10;}
}
}
}
In the function "ButtonClicked, I want to check which button is clicked. After that I want to store a value in the private var "Buttonclicked" So that based on this number I know which FLV needs to be loaded. But when I export I get an error "Access of Undefined property event". This probably has got to do with my "If" statement in the functions but I have no clue on how to solve this.
Could someone please help me out? I know programming with classes would be much neater, but I have to little experience in this.
Thanks in advance,
Harold
You got that error because for your ButtonClicked() function you've declared an MouseEvent object called Event and inside the function you've used event, I think it's just a typing mistake.
So your function can be like this :
function ButtonClicked(event:MouseEvent):void
{
// ...
}
Also, I remarked in your code that you've written a lot of code to do something really easy and don't need all that code. Don't forget that when you are repeating the same thing n times (10 times for your case), that you are doing something wrong and that you should (can) optimize that. You can use a function, for example, to do that repeated task ...
For that, take this example :
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.events.Event;
public class Main extends MovieClip {
private const BUTTONS_NUM:int = 10;
private const BOTTONS_Y:int = 70;
private const BUTTONS_SUFFIX:String = 'inst_knop';
private const VIDEOS:Array = ['1.flv', '2.flv', '3.flv', '4.flv', '5.flv', '6.flv', '7.flv', '8.flv', '9.flv', '10.flv'];
public function Main()
{
// initialize the FLVPlayback component inserted in the stage
videoclip.width = 640;
videoclip.height = 400;
videoclip.autoPlay = true;
videoclip.addEventListener(Event.COMPLETE,videoComplete);
createButtons();
}
private function createButtons(): void
{
for(var i:int = 0; i < BUTTONS_NUM; i++){
var button:knopje = new knopje();
button.name = BUTTONS_SUFFIX + (i+1);
button.x = i*100 + 50;
button.y = BOTTONS_Y;
button.buttonMode = true;
button.addEventListener(MouseEvent.CLICK, playVideo);
addChild(button);
}
}
private function playVideo(event:MouseEvent):void
{
// get button's index, for example : 7 for the button called "inst_knop7"
var button_index:int = int((event.currentTarget.name).substr(BUTTONS_SUFFIX.length)) - 1;
// play the video
videoclip.play('video/' + VIDEOS[button_index]);
}
private function videoComplete(event:Event):void
{
trace('end of the video.');
}
}
}
Hope that can help.

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();
}
}
}