AS3 RemoveChild.Пуля и Враг? - PullRequest
       17

AS3 RemoveChild.Пуля и Враг?

1 голос
/ 09 января 2012

У меня проблемы с пулей и противником. Я не думаю, что мне нужно так много объяснять, просто взгляните на код. Я не очень хорош в AS3, я новичок и учусь, поэтому мне нужна помощь: P

Хорошо, это на временной шкале вспышки / сцены. Здесь я говорю, что если я нажимаю мышью, пуля должна быть создана.

stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

function mouseDown(pEvent)
{
    // Create a new bullet
    var b = new Bullet();
    // Set his position to the tank position
    b.x = Player.x;
    b.y = Player.y;
    // Save the randian angle between the mouse and the tank
    // This angle will set the direction of the bullet
    b.angleRadian = Math.atan2(AIM.y - Player.y,AIM.x - Player.x);
    // Add an enter frame event on each bullet
    b.addEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    // Add this display object on the display list
    addChild(b);
}

// Velocity of each bullet
var speed = 8;

function bulletEnterFrame(pEvent)
{
    // Get the current object (Bullet)
    var b = pEvent.currentTarget;
    // Move this bullet on each frames
    // On X axis use the cosinus angle
    b.x +=  Math.cos(b.angleRadian) * speed;
    // On Y axis use the sinus angle
    b.y +=  Math.sin(b.angleRadian) * speed;
    // Orient the bullet to the direction
    b.rotation = b.angleRadian * 180 / Math.PI;
    // You have to remove each created bullet 
    // So after every moves you must check bullet position
    // If the bullet is out of the screen
    if (b.x < 0 || b.x > 1024 || b.y < 0 || b.y > 768)
    {
        // Remove it from the display list
        removeChild(b);
        // /!\ AND REOMOVE HIS EVENT LISTER
        b.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    }

    if (b.hitTestObject(Enemy))
    {
        **I WANT TO REMOVE ENEMY!!!!**
    }
}

OK. И на временной шкале я также создаю врагов. Как это:

var Enemy:MovieClip = new AI(stage);
addChild(Enemy);

И класс противника выглядит так:

package 
{

import flash.display.MovieClip;
import flash.events.*;
import flash.display.Stage;

public class AI extends MovieClip
{

    var speed:Number = 1;
    var distance:Number;

    public function AI(stage):void
    {


        addEventListener(Event.ENTER_FRAME, onadd);

    }

    public function onadd(e:Event):void
    {
        addEventListener(Event.ENTER_FRAME, loop);
    }

    private function loop(e:Event):void
    {

        var Player = MovieClip(root).Player;

        var yDistance:Number = Player.y - y;
        var xDistance:Number = Player.x - x;

        if (Math.sqrt(yDistance*yDistance +  xDistance*xDistance) < speed)
        {
            x = Player.x;
            y = Player.y;
        }
        else
        {
            var radian:Number = Math.atan2(yDistance,xDistance);
            x +=  Math.cos(radian) * speed;
            y +=  Math.sin(radian) * speed;
            rotation = radian * 180 / Math.PI;
        }

        if (this.hitTestObject(Player))
        {
            trace("DEAD");
        }

        //distance = Math.sqrt( ( MovieClip(root).Player.x - this.x ) * ( MovieClip(root).Player.x - this.x ) + ( MovieClip(root).Player.y - this.y ) * ( MovieClip(root).Player.y - this.y ) );

    }

}

}

Смысл в том, что я не могу понять, как убрать врага при попадании пули. Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 04 августа 2012
if (b.x < 0 || b.x > 1024 || b.y < 0 || b.y > 768)
{
    // Remove it from the display list
    removeChild(b);
    // /!\ AND REOMOVE HIS EVENT LISTER
    b.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
}

Вы удаляете ребенка, затем пытаетесь получить доступ к событию с ребенком.

Попробуйте

if (b.x < 0 || b.x > 1024 || b.y < 0 || b.y > 768)
{ 
    b.removeEventListener(Event.ENTER_FRAME, bulletEnterFrame);
    removeChild(b);
}
0 голосов
/ 09 января 2012

Просто используйте removeChild.

if (b.hitTestObject(Enemy))
{
    //**I WANT TO REMOVE ENEMY!!!!**
    removeChild(Enemy);
}
...