Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8817463
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 14, 20262026-06-14T04:51:18+00:00 2026-06-14T04:51:18+00:00

I’ve been busy with creating a memory game (card matching), but I’ve come across

  • 0

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
            }
        }
    }
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-14T04:51:20+00:00Added an answer on June 14, 2026 at 4:51 am

    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]);
        }
    }
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a jquery bug and I've been looking for hours now, I can't
I have a string like this: La Torre Eiffel paragonata all&#8217;Everest What PHP function
I have a French site that I want to parse, but am running into
This could be a duplicate question, but I have no idea what search terms
I have an autohotkey script which looks up a word in a bilingual dictionary
I have an array which has BIG numbers and small numbers in it. I
I have a text area in my form which accepts all possible characters from
I have a .ini file as follows: [playlist] numberofentries=2 File1=http://87.230.82.17:80 Title1=(#1 - 365/1400) Example
link Im having trouble converting the html entites into html characters, (&# 8217;) i
I have just tried to save a simple *.rtf file with some websites and

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.