Comunidad de diseño web y desarrollo en internet online

Foto panorámica 360º en flash

Esta es una clase que te permite generar una panorámica interactiva de una fotografía en Flash.

Sólo necesitas la fotografía continua de la panorámica y usar este codigo en cualquier pelicula para añadir una visión de 360º controlada por el usuario. Espero que les resulte útil...

He aqui un ejemplo:

[Da click sostenido y arrastra en la imágen]

Coloca este codigo en un nuevo archivo de texto llamado "PanoVR.as" y pon ese archivo en la misma carpeta de tu .FLA

Código :

class PanoVR {
//Esta clase debe ir en un archivo independiente "PanoVR.as". Debes respetar las mayusculas y minusculas del nombre.
   var ruta:MovieClip;
   var clip1:MovieClip;
   var clip2:MovieClip;
   var marco:MovieClip;
   var mascara:MovieClip;
   var mascara2:MovieClip;
   var prof:Number;
   var x:Number;
   var y:Number;
   var aceleracion:Number;
   //
   //--CONSTRUCTOR------------------------------------
   function PanoVR(queRuta:MovieClip, queClip1:String, queClip2:String, queX:Number, queY:Number, queW:Number, queH:Number, queAceleracion) {
      ruta = queRuta;
      prof = ruta.getNextHighestDepth();
      clip1 = ruta.clip1 = ruta.attachMovie(queClip1, queClip1, prof);
      clip2 = ruta.clip2 = ruta.attachMovie(queClip2, queClip2, prof + 1);
      //inis
      iniPosicion(queX, queY);
      iniMascara(queX, queY, queH, queW);
      iniMarco(queX, queY, queH, queW);
      iniEvents(queAceleracion);
   }
   //--INIS----------------------------------------
   function iniPosicion(queX, queY) {
      x = clip1.x = clip2.x = queX;
      y = clip1.y = clip2.y = queY;
      clip1._x = x;
      clip1._y = y;
      clip2._x = x + clip1._width;
      clip2._y = y;
   }
   //--------------------------------------------------
   function iniMascara(queX, queY, queH, queW) {
      prof = ruta.getNextHighestDepth();
      mascara = ruta.createEmptyMovieClip("mask_mc", prof);
      mascara.beginFill(0xFF0000);
      mascara.lineStyle(1, 0x000000, 100);
      mascara.moveTo(queX, queY);
      mascara.lineTo(queX + queW, queY);
      mascara.lineTo(queX + queW, queY + queH);
      mascara.lineTo(queX, queY + queH);
      mascara.lineTo(queX, queY);
      mascara.endFill();
      mascara2 = mascara.duplicateMovieClip("mask2_mc", prof + 1);
      clip1.setMask(mascara);
      clip2.setMask(mascara2);
   }
   //--------------------------------------------------
   function iniMarco(queX, queY, queH, queW) {
      prof = ruta.getNextHighestDepth();
      marco = ruta.createEmptyMovieClip("marco_mc", prof);
      marco.lineStyle(1, 0x000000, 100);
      marco.moveTo(queX, queY);
      marco.lineTo(queX + queW, queY);
      marco.lineTo(queX + queW, queY + queH);
      marco.lineTo(queX, queY + queH);
      marco.lineTo(queX, queY);
   }
   //--------------------------------------------------
   function iniEvents(queAceleracion) {
      clip1.useHandCursor = false;
      clip2.useHandCursor = false;
      aceleracion = clip1.ac = clip2.ac = queAceleracion;
      //-----
      clip1.onPress = clip2.onPress = function () {
         var pano1:MovieClip = this;
         var pano2:MovieClip = (this == this._parent.clip1) ? this._parent.clip2 : this._parent.clip1;
         this.onEnterFrame = function() {
            this.point2 = _xmouse;
            this.vel = (this.point2 - this.point1) / 15 * -1;
            pano1._x += pano1.vel;
            enlacaPanos(pano1, pano2);
         };
         this.point1 = _xmouse;
      };
      clip1.onRelease = clip1.onReleaseOutside = clip2.onRelease = clip2.onReleaseOutside = function () {
         movimientoInercia(this);
      };
      //-----
      function enlacaPanos(pano1, pano2) {
         if (pano1._x < pano1.x) {
            pano2._x = pano1._x + pano1._width;
         } else {
            pano2._x = pano1._x - pano1._width;
         }
         //vuelta
         if (pano1._x < pano1.x & pano2._x < pano2.x) {
            pano1._x = pano2._x + pano2._width;
         } else if (pano1._x > pano1.x & pano2._x > pano2.x) {
            pano1._x = pano2._x - pano2._width;
         }
      }
      function reCapturaPunto1() {
         this.point1 = _xmouse;
      }
      function movimientoInercia(quePano) {
         var pano1:MovieClip = quePano;
         var pano2:MovieClip = (pano1 == pano1._parent.clip1) ? pano1._parent.clip2 : pano1._parent.clip1;
         pano1.onEnterFrame = function() {
            var ac:Number = pano1.vel * pano1.ac;
            pano1.vel -= ac;
            pano1._x += pano1.vel;
            if (ac < 0.01 & ac > -0.01) {
               delete pano1.onEnterFrame;
            }
            enlacaPanos(pano1, pano2);
         };
      }
      //end iniEvents
   }
   //--------------------------------------------------
}

Para usarlo, en tu .FLA colocarías algo como esto. En el primer keyframe de tu animación:

Código :

var pano = new PanoVR(this, "pano1a", "pano1b", 0, 0, 450, 240, 0.15);


Descargate el .fla aqui

¿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

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