1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Flash função sin

Discussão em 'Web Development' iniciada por metRo_, 24 de Março de 2008. (Respostas: 2; Visualizações: 576)

  1. metRo_

    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: [​IMG]
     
    Última edição: 25 de Março de 2008
  2. lfdesign

    lfdesign Power Member

    Não sei porque é que isso te acontece...

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

    PHP:
    mc.addEventListener(Event.ENTER_FRAMEmcMove);
    var 
    rad:Number 0;

    function 
    mcMove(e:Event):void {
        
    this.Math.sin(rad)* 100;
        if(
    rad && rad 1) {
            
    rad += .03;
        } else {
            
    rad -= .03;
        }
    }
     
  3. metRo_

    metRo_ Power Member

    Vou testar esse algoritmo em as2... Obrigado desde já pela ajuda...
     

Partilhar esta Página