views:

370

answers:

1

Hi,

I've got as far as adding multiple buttons to the stage with AS3 and giving them unique instance names, but now I have a problem. There is no limit on the amount of buttons that could be present, there could be one or one hundred so I can't hard code.

How would I go about creating event listeners for each button? I tried pushing each instance name into an array then looping through but that gave me an error about how the buttons didn't exist, so it can't listen.

How would I do this? Any help is much appreciated!

+2  A: 

Some example:

function init ():void
{
    var btn:Sprite;
    for ( var i:uint = 0; i < 100; i++ )
    {
        btn = new Sprite();
        btn.graphics.beginFill( Math.round( Math.random() * 0xFFFFFF ) );
        btn.graphics.drawRect( 0, 0, 50, 50 );
        btn.x = ( i % 20 ) * 50;
        btn.y = Math.floor( i / 20 ) * 50;

        // event listeners
        btn.addEventListener( MouseEvent.CLICK, btnClick );

        this.addChild( btn );
    }
}

function btnClick ( event:MouseEvent ):void
{
    var btn:Sprite = event.currentTarget as Sprite;
    btn.graphics.clear();
    btn.graphics.beginFill( Math.round( Math.random() * 0xFFFFFF ) );
    btn.graphics.drawRect( 0, 0, 50, 50 );
}

In the same way you could add a subclass of Sprite and for example keep an additional public identifier or whatever with it. Then you can simply look in the click event which was clicked.

poke
That works beautifully, thanks! I worked out my problem, I was trying to check buttons via their instance name and setting that instance name with ".name", but according to an article that doesn't work in AS3, I should instead use an array, which I did!I updated my code to reflect some of yours, very much appreciated, you point me in the right direction!(article in question: http://www.calypso88.com/?p=302)
Yeah, in AS3 objects put to the stage with an instance name are more like predefinied variables, you can access. Glad I could help :)
poke