0

I need some help here i can't do collisions because its "undefined" i guess i need to make and array to check it but i need help doing it never done it before :/ Having some difficulties here tried some arrays but no success new at javascript need help well appreciated anyone who helps

/* Código que pára a timeline na 1 frame para que o menu continue apresentado*/
stop();
/*Movimenta a nave fazendo a seguir os movimentos do rato e esconde o cursor do sistema operacional*/

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
{


    var bullet:bullet_ = new bullet_();
    addChild(bullet);
    bullet.x=arma_tiro.x;
    bullet.y=arma_tiro.y;
    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, 1000) ; //define intervalo de tempo entre as varias repetiçoes da funçao
function Primeira(){  //funçao de spawn de nave 1

    var invader1:invader_1 = new invader_1();
    addChild(invader1);
    invader1.x=0;
    invader1.y=15;
    invader1.addEventListener(Event.ENTER_FRAME, mover1);
} 

function mover1(event:Event):void // função para mover a nave para lado direito */
{
    event.target.x+=10;
}

//Nave 2

setInterval(Segunda, 1000) ; //define intervalo de tempo entre as varias repetiçoes da funçao
function Segunda(){  //funçao de spawn de nave 1

    var invader2:invader_2 = new invader_2();
    addChild(invader2);
    invader2.x=0;
    invader2.y=45;
    invader2.addEventListener(Event.ENTER_FRAME, mover2);
} 

function mover2(event:Event):void // função para mover a nave para lado direito */
{
    event.target.x+=10;
}

//Nave 3

setInterval(Terceira, 1000) ; //define intervalo de tempo entre as varias repetiçoes da funçao
function Terceira(){  //funçao de spawn de nave 1

    var invader3:invader_3 = new invader_3();
    addChild(invader3);
    invader3.x=0;
    invader3.y=85;
    invader3.addEventListener(Event.ENTER_FRAME, mover3);
} 

function mover3(event:Event):void // função para mover a nave para lado direito */
{
    event.target.x+=10;
}

if (bullet.hitTestObject(invader1))
        {
            //Remove bullet and enemy
            removeChild(bullet);
            removeChild(invader1);

        }

1 Answer 1

1

it seems that bullet_ is a class and not an instance so you cannon call hitTestObject on it. maybe try replace bullet_ by bullet.

there are many solution to do that but the simplest for me would be to keep 2 array, one for the bullets, one for the enemies.

so add arrays:

// create the array for the bullets
bullets  :Array = [];
// create the array for the enemies
enemies :Array = [];

add an onEnterFrame event listener to do the tests and the game logic on each frame:

addEventListener( Event.ENTER_FRAME, _gameLoop );

change your function to create bullets and enemies:

function fl_MouseClickHandler_3( event:MouseEvent ):void
{
    // 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 );
}

function Primeira():void
{
    var invader1:invader_1 = new invader_1();
    addChild(invader1);
    invader1.x=0;
    invader1.y=15;

    enemies.push( invader1 );
}

function Segunda():void
{
    var invader2:invader_2 = new invader_2();
    addChild(invader2);
    invader2.x=0;
    invader2.y=45;

    enemies.push( invader2 );
} 

function Terceira():void
{
    var invader3:invader_3 = new invader_3();
    addChild(invader3);
    invader3.x=0;
    invader3.y=85;

    enemies.push( invader3 );
} 

now create the game loop function:

function _gameLoop(e: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( bullet[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] );
                // remove it from the array
                enemies.splice(i,1);
            }
        }
    }
}

Hope this could helps you

Sign up to request clarification or add additional context in comments.

2 Comments

did as you told me now last error : ArgumentError: Error #1063: Argument count mismatch on flashproject_fla::MainTimeline/_gameLoop(). Expected 0, got 1.
Was all ok i found that ty a lot :D

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.