Curso AS3

Repulsão

Me passaram um script no fórum em AS2 para eu passar para AS3, segue logo abaixo.

Os cálculos são baseados na distância entre dois pontos, mouse e bola, e no ângulo formado entre o mouse e a bola.

O angulo em graus e não radianos modifica o resultado.

var angulo:Number = Math.atan2(a.y - mouseY, a.x - mouseX) * 180 / Math.PI;

This movie requires Flash Player 8.

Segue a classe:

package{
 
	import flash.display.MovieClip;
	import flash.display.Graphics;
	import flash.display.Stage;
	import flash.events.Event;
 
	public class repulsaoBolas extends MovieClip
	{
		private var sWidth:uint = stage.stageWidth;
		private var sHeight:uint = stage.stageHeight;
		private var qtd:uint = 500;
		private var mcs:Array = new Array();
		private var bola:MovieClip;
 
		public function repulsaoBolas():void
		{
			stage.frameRate = 30;
 
			for(var i:uint = 0; i < this.qtd; i++)
			{
				this.bola = new MovieClip();
 
				this.bola.graphics.beginFill(Math.random()*0xFFFFFF);
				this.bola.graphics.drawCircle(0,0,Math.random() * 4 + 6);
				this.bola.graphics.endFill();
 
				this.bola.x = Math.round(Math.random() * this.sWidth);
				this.bola.y = Math.round(Math.random() * this.sHeight);
				addChild(this.bola);
 
				this.bola.ox = this.bola.x;
				this.bola.oy = this.bola.y;
 
				this.mcs.push(this.bola);
			}
 
			addEventListener(Event.ENTER_FRAME, this.onMove);
		}
 
		private function onMove(evt:Event):void
		{
			for each(var a in this.mcs)
			{
				var angulo:Number = Math.atan2(a.y - mouseY, a.x - mouseX);
 
				var d:Number = 1000 / Math.sqrt(Math.pow(mouseX - a.x, 2) + Math.pow(mouseY  - a.y, 2));
 
				a.x +=  d * Math.cos(angulo) + (a.ox-a.x) * 0.1;
				a.y +=  d * Math.sin(angulo) + (a.oy-a.y) * 0.1;
			}
		}
	}
}

11 Responses to “Repulsão”

  1. Samurai Says:

    Muito legal, do tipo de coisa que a gente vê e fica pensando em algo para poder usar-la.

  2. Ederson Says:

    interessante o efeito

    o link do trabalho original é esse:
    http://shang-liang.com/blog/using-molecular-mechanics-in-flash/

    lá tem inclusive a classe para quem quiser o efeito usando AS2.0

  3. Ederson Says:

    nossa escrevi interessante com Ç, erick se puder alterar ;)

    e parabens pelo blog

  4. Erick Souza Says:

    Obrigado Ederson. =)

  5. Bruno Mikoski Says:

    Parabéns Erick! Otimo trabalho! Eu estou criando vergonha na cara agora, e trabalhando com AS3, é sempre muito bom ver trabalhos como o seu, para dar umas luzes :D!

  6. Yaz Okulu Says:

    hello everybody. my Japanese is not good but it seems like a very nice web site. thanks

  7. Bruno Ribeiro Says:

    My Japanese is not good…. hehe
    é cada figura!

    Bom trabalho! o Blog é importante porque não é fácil encontrar publicações de qualidade que tratem de distribuir o conhecimento AS3.

  8. Matheus Says:

    Olá Eric Parabens pelo trabalho, so que coloquei o codigo em um arquivo .as e no frame 1 do arquivo fla eu criei um obj a classe repulsaoBolas e rodei e nada aconteceu? Porque?

    abs

  9. Marcos_paiva Says:

    Puts Erck, muito interessante essa classe, bem como esse efeito.

    !

  10. Renan Says:

    Fala Erick beleza??
    muito bom seus post!! entrei hj no seu blog e achei legal seus tutoriasis e tal!!
    gostaria de saber no caso de eu criar os MCs sendo circulos ou de outra forma, como que eu implementaria o codigo para executar esse mesmo efeito neles!
    sem fazer tudo em linha de codigo só o efeito de repulsão mesmo!! se puder me ajudar agradeço muito e mais uma vez parabéns pelo seu blog está ajudando bastante gente!!

  11. Fernando Says:

    Erik, no seu código há um pequeno erro. Você esqueceu de declarar o tipo da variável “a” como MovieClip no for each.

Leave a Reply