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; } } } }




October 8th, 2007 at 10:02
Muito legal, do tipo de coisa que a gente vê e fica pensando em algo para poder usar-la.
October 8th, 2007 at 11:59
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
October 8th, 2007 at 12:05
nossa escrevi interessante com Ç, erick se puder alterar
e parabens pelo blog
October 8th, 2007 at 12:26
Obrigado Ederson. =)
October 9th, 2007 at 10:38
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!
March 29th, 2008 at 5:07
hello everybody. my Japanese is not good but it seems like a very nice web site. thanks
May 21st, 2008 at 18:39
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.
May 23rd, 2008 at 16:55
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
September 16th, 2008 at 18:53
Puts Erck, muito interessante essa classe, bem como esse efeito.
!
July 30th, 2009 at 12:46
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!!
October 20th, 2009 at 19:53
Erik, no seu código há um pequeno erro. Você esqueceu de declarar o tipo da variável “a” como MovieClip no for each.