Flash função sin

metRo_

Power Member
Eu estava a tentar animar uma bola com um movimento suave quando me lembrei de usar a função sin para isso, mas o que estava a acontecer é que os valores se iam alterando com tempo, a bola ia subindo pouco a pouco, alguém sabe porque é que isso acontece? eu suponho que seja pelas casas decimais que se vão perdendo nas contas, fica aqui o código do que fiz e como tentei resolver o problema:

PHP:
onClipEvent(load) {
    var j:Number = 0;
    var w:Number = 4;
    var menor:Number = _y;//menor valor;
    var menorTemp:Number;//variavel temporaria para o menor valor;
    var maior:Number = _y;//maior valor;
    var maiorTemp:Number;//variavel temporaria para o maior valor;
    var difMenores:Number = 0;//variavel para a diferença entre os menores valores;
    var difMaiores:Number = 0;//variavel para a diferença entre os maiores valores;
}
 
onClipEvent (enterFrame) {
    _y +=Math.sin(j/3)*w;//função que define a animação, (j/3) aumenta o periodo e o *w aumenta a amplitude do movimento;
    j+=0.5;
    if(_y < menor){//este if vai verificar se a posição do mc é menor que a menor posição anteriormente atingida;
        menorTemp = menor;
        menor = _y;
        if(menorTemp != menor){//este if verifica se o menor atingido da outra vez diferente do menor atingido agora;
            difMenores = menorTemp - menor;
            _y += difMenores;//soma a diferença dos menores para voltar +- à osição inicial;
        }
    }
    if(_y < maior){//este if faz o mesmo que o de cima mas para a maior posição atingida;
        maiorTemp = maior;
        maior = _y;
        if(maiorTemp != maior){
            difMaiores = maiorTemp - maior;
            _y += difMaiores;
        }
    }
}
Nesta imagem podem ver o que tentei explicar, aí mostra a posição do mc em função do tempo:
23r02zr.png
 
Última edição:
Não sei porque é que isso te acontece...

Eu usei este código (AS3) e funciona perfeitamente!

PHP:
mc.addEventListener(Event.ENTER_FRAME, mcMove);
var rad:Number = 0;

function mcMove(e:Event):void {
    this.y = Math.sin(rad)* 100;
    if(rad > 0 && rad < 1) {
        rad += .03;
    } else {
        rad -= .03;
    }
}
 
Back
Topo