Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thales Rodrigues

Movimento Independente

Recommended Posts

Eu estou trabalhando em um jogo onde você tem uma torre no centro da tela e você tem que atirar nos mísseis que vão aparecendo na tela antes que eles explodam na torre.

Mas eu estou com um problema que não consigo resolver, eu não consigo fazer os mísseis ficarem com um movimento independente, ou seja, todos os mísseis ficam se movendo no mesmo sentido.

 

function adicionar(e:TimerEvent):void
{
    direcao = Math.round(Math.random() * 3);
    switch (direcao)
    {
        case 0 :
            eixoX = stage.stageWidth;
            eixoY = Math.random() * stage.stageHeight;
            break;
        case 1 :
            eixoY = 0;
            eixoX = Math.random() * stage.stageWidth;
            break;
        case 2 :
            eixoX = 0;
            eixoY = Math.random() * stage.stageHeight;
            break;
        case 3 :
            eixoY = stage.stageHeight;
            eixoX = Math.random() * stage.stageWidth;
            break;
    }
    cinza = new Cinza  ;
    addChild(cinza);
    cinza.x = eixoX;
    cinza.y = eixoY;
    anguloMissil = Math.atan2(torre.y - cinza.y,torre.x - cinza.x) * 180 / Math.PI;
    cinza.rotation = anguloMissil;
    velocidadeX = new Number(Math.cos(anguloMissil * Math.PI / 180) * velMissil);
    velocidadeY = new Number(Math.sin(anguloMissil * Math.PI / 180) * velMissil);
    cinza.addEventListener(Event.ENTER_FRAME, anima);
    setChildIndex(cinza, 0);
}

var velocidadeX:Number = 0;
var velocidadeY:Number = 0;
var anguloMissil:Number = 0;
var velMissil:Number = 5;
var missil:DisplayObject;
var explosao:Explosao = new Explosao();
var tiro:DisplayObject;
var boom:DisplayObject;

function anima(e:Event):void
{
    missil = DisplayObject(e.target);
    missil.x += velocidadeX;
    missil.y += velocidadeY;
    tiro = DisplayObject(laser);
    if (missil.hitTestObject(tiro))
    {
        tiro.parent.removeChild(tiro);
        missil.removeEventListener(Event.ENTER_FRAME, anima);
        missil.parent.removeChild(missil);
        explosao = new Explosao();
        addChild(explosao);
        explosao.x = missil.x;
        explosao.y = missil.y;
        boom = DisplayObject(explosao);
        if (explosao.currentFrame == 7)
        {
            boom.parent.removeChild(boom);
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa mais responder!

Consegui resolver o problema (na sorte) mudando a função "anima"

 

function anima(e:Event):void
{
	missil = DisplayObject(e.target);
	velocidadeX = Math.cos(missil.rotation * Math.PI / 180) * velMissil;
	velocidadeY = Math.sin(missil.rotation * Math.PI / 180) * velMissil;
	missil.x += velocidadeX;
	missil.y += velocidadeY;
	tiro = DisplayObject(laser);
        //[PARTE NÃO IMPORTANTE DA FUNÇÃO FOI RETIRADA]
}

 

Eu coloquei a velocidade X e Y baseada na rotação do míssil e não na variável do ângulo e acabei resolvendo o problema :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.