#1023 StackOverflow ERROR

I have problem with this array thing I am doing. U can just plug in the code and run. I need to have 2 things display out of the same array and which ever is picked gets kickedout from the array and stashed into another one.

One of the 2 things that are displaying out is picked at random and the other one goes in order it was put in.

So the logic I applied, or tried applying and is not working very well is..

Once the 2 things display out and if u pick the index count, no numbers change since the index count becomes subtracted by one, so the object after it gets pushed up. but if the random choice is picked the index count moves up by one since it needs to keep moving...

The error i get is this:

TypeError: Error #2007: Parameter child must be non-null.
    at flash.display::DisplayObjectContainer/addChild()
    at Level3Torture_fla::MainTimeline/civilizedorder()[Level3Torture_fla.MainTimeline::frame1:87]
    at Level3Torture_fla::MainTimeline/goNext()[Level3Torture_fla.MainTimeline::frame1:114]
    at Level3Torture_fla::MainTimeline/switchpic()[Level3Torture_fla.MainTimeline::frame1:79]

This is the Code:

import flash.sampler.NewObjectSample;
import flash.display.Sprite;
import flash.events.MouseEvent;

var eating_breakfast:Sprite;
var walking:Sprite;
var swimming:Sprite;
var art:Sprite;
var choices:Array = new Array ();

//Sprite Creation
eating_breakfast = new Sprite ();
eating_breakfast.graphics.beginFill(0xE39D43);
eating_breakfast.graphics.drawRect(0,0,50,50);
eating_breakfast.graphics.endFill();
eating_breakfast.x = 50;
eating_breakfast.y = 50;


walking = new Sprite ();
walking.graphics.beginFill(0xC3266C);
walking.graphics.drawRect(0,0,50,50);
walking.graphics.endFill();
walking.x = 100;
walking.y = 100;


swimming = new Sprite ();
swimming.graphics.beginFill(0x48AFD1);
swimming.graphics.drawRect(0,0,50,50);
swimming.graphics.endFill();
swimming.x = 150;
swimming.y = 150;


art = new Sprite ();
art.graphics.beginFill(0xafdb44);
art.graphics.drawRect(0,0,50,50);
art.graphics.endFill();
art.x = 200;
art.y = 200;

//adding sprites into array
choices.push( eating_breakfast);
choices.push(walking);
choices.push(swimming);
choices.push(art);


var indexcount = 0;
var randomize:Number;
var storageArray: Array = new Array ();
civilizedorder();
randomizedorder();
this.addEventListener(MouseEvent.CLICK,switchpic);

//pick the target generated object
function switchpic(t:MouseEvent)
{
    //for index count
    if (t.target == choices[indexcount])
    {
        storageArray.push(choices[indexcount]);
        removeChild(choices [indexcount]);
        removeChild(choices [randomize]);
        choices.splice(indexcount,1);
        goNext();

    };
    // for randomize
if (t.target == choices[randomize])
{
    storageArray.push(choices[randomize]);
    removeChild(choices [indexcount]);
    removeChild(choices [randomize]);
    choices.splice(randomize,1);
    indexcount++;
    trace("The Index count is" + indexcount);
    goNext();
}
}

//generates the index count object
function civilizedorder()
{

addChild(choices [indexcount]);
choices[indexcount].x = 300;


}
trace("The number of choices in the choice array is " + choices.length);
//generates the randomized object
function randomizedorder()
{

randomize = Math.floor(Math.random() * choices.length);
trace("the random number is" + randomize);
if (randomize == indexcount )
{
    randomizedorder();
}
else
{
    addChild(choices [randomize]);
}

}
//EDIT

    function goNext()
{
    trace("The storagearray has " + (storageArray.length));
    if (choices.length < 0 || choices.length > 0)
    {
        if (indexcount > choices.length-1)
        {
            indexcount = choices.length - 1;
        }
        civilizedorder();
        randomizedorder();
    }
}

It is giving me a new error now. It's called StackOverflow. I am not entirely sure what is going wrong now.

Answers


EDIT: To add a conditional and check if you will be out of bounds for adding a child in this array, try this:

if(indexcount <= choices.length){
  addChild(choices [indexcount]);
}

Try commenting out the splicing in the switchpic() method. That or re-add those values/sprite instances to the array.

I think that you've sliced from the "choices" array twice in the switchpic() method, and never actually add to the array ever again. So you'll eventually end up with an empty choices array. Hence the error.

In the second conditional, if (t.target == choices[randomize]), you increment indexcount, and then call goNext() which regenerates the randomize value to not equal the indexcount, but also tries to re-add a child sprite.

This could cause an array of 4 items to become 2 items, and then, possibly, randomize = 0, indexcount = 1. In the second pass, you might have an array of 0 items, with randomize = 0, indexcount = 1 and the error to occur.

Here's the flow, I imagine:

It looks like you're clicking on an instance of a sprite.

Then it calls switchpic(), which executes:

...
choices.splice(indexcount,1);
...

and then goNext() which calls civilizedorder()

which executes:

...
addChild(choices [indexcount]);
...

Need Your Help

How to rebind event handler after .off() and upon animation completion using CSS selectors and jQuery

jquery jquery-selectors jquery-animate mouseevent mouseenter

I am new to JavaScript and attempting to create animated buttons with a mask that changes opacity, revealing what is behind the mask. I am using .mouseenter() and .mouseleave() as my event

Check which desktop enviroment is the user using (Linux) in Qt

linux qt unity3d menubar

is it possible to check which desktop environment is the user is using (say KDE or Unity).

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.