Comunidad de diseño web y desarrollo en internet online

Efecto de anillo 3D en Actionscript 2

Lo que tenemos que hacer antes de programar es crear un clip de película con vinculación circulo. El contenido de este clip puede ser cualquier cosa. Por ejemplo, un circulo.

Lo que hacemos con este código es hacer un anillo 3D de círculos. Si apretamos las teclas Arriba y Abajo aumenta el número de círculos o disminuye. La posición vertical del ratón asigna el sentido de rotación y la vertical la inclinación.

El código va en el primer fotograma:

Código :

var x:Number = 275;
var y:Number = 200;

var h:Number = 0;
var w:Number = 300;

var c:Array = [];
var cCount:Number = 10;

var theta:Number = 0;

function init() {   
   for (var i:Number =0; i < cCount; i++) {
      var circulo:MovieClip = _root.attachMovie("circulo", "circulo_"+i, i, {
          _x: x + w/2*Math.sin(Math.PI*2*i/cCount),
          _y: y + h/2*Math.cos(Math.PI*2*i/cCount)
          });
      c.push(circulo);
      
      var col:Color = new Color(circulo);
      var o = {
         r: 255*(2*Math.abs(i-cCount/2)/cCount),
         g: 100+155*(2*Math.abs(i-cCount/2)/cCount),
         b: 100
      };
      col.setRGB((o.r<<16)+(o.g<<8)+o.b);
   }
}

function onEnterFrame() {
   theta += 0.02 *Math.PI*(_root._xmouse-Stage.width/2)/Stage.width;
   theta = (theta-Math.PI)%(2*Math.PI)+Math.PI;
   theta = (theta+Math.PI)%(2*Math.PI)-Math.PI;
   
   h = (_root._ymouse - Stage.height/2)*0.4;
   
   for (var i in c) {
      var circulo = c[i];
      
      var t:Number = Math.PI*2*i/cCount + theta;
      t = (t-Math.PI)%(2*Math.PI)+Math.PI;
      t = (t+Math.PI)%(2*Math.PI)-Math.PI;
      
      circulo._x = x+w/2*Math.sin(t);
      circulo._y = y+h/2*Math.cos(t);
      
      circulo._xscale = circulo._yscale = 70+30*Math.cos(t);
      circulo._xscale *= Math.cos(t);
      
      t = 1 - Math.abs(t)/Math.PI;
      circulo.swapDepths(Math.round(t*2*cCount));
   }
}

Mouse.addListener(this);
this.onMouseWheel = function(d) {
   while (c.length > 0) c.pop().removeMovieClip();
   cCount = Math.max(cCount+d, 1);
   init();
}
Key.addListener(this);
this.onKeyDown = function() {
   if (Key.getCode() == Key.UP)
      this.onMouseWheel(1);
   else if (Key.getCode() == Key.DOWN)
      this.onMouseWheel(-1);
}

init();

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate