Comunidad de diseño web y desarrollo en internet online

Como acceder a un objeto que contiene un movieclip vinculado

Citar            
MensajeEscrito el 01 Ago 2007 05:53 pm
Tengo mi objeto declarado asi:

Código :

var dockTemplate = { 
   layout: 0, /* top | right | bottom | left | *rotation* */ 
   icon_size: 85,//128 
   icon_min: 40,//32 
   icon_max: 85, 
   icon_spacing: 8, 
   items: [ 
         { id: 'settings', label: 'Cadenas'}, 
         { id: 'blog', label: 'CicloA' }, 
         { id: 'forum',label: 'CicloV' }, 
         { id: 'shop', label: 'Conta' }, 
         { id: 'support', label: 'Actividad' }, 
         { id: 'search', label: 'Glosario' }, 
         { id: 'contact', label: 'Sa' }, 
         { id: 'trash', label: 'Musica' } 
         ], 
   span: null, 
   amplitude: null, 
   callback: this.dockActions, 
   enOver: this.dockOver, 
   enOut: this.dockOut 
} 

y lo atacheo asi:

Código :

this.attachMovie('Dock', 'menu_mc', 1, dockTemplate); 

Donde dock es mi clase
Dock.as

Código :

class Dock extends MovieClip {
   var icon_min:Number;
   var icon_max:Number;
   var icon_size:Number;
   var icon_spacing:Number;
   var width:Number;
   var span:Number;
   var amplitude:Number;
   var ratio:Number;
   var scale:Number = Number.NEGATIVE_INFINITY;
   var trend:Number = 0;
   var xmouse:Number;
   var ymouse:Number;
   var layout:String;
   var callback:Function;
   var enOver:Function;
   var enOut: Function;
   var items:Array;
   function Dock() {
      setParameters();
      setLayout();
      createIcons();
      onEnterFrame = monitorDock;
   }
   private function setParameters():Void {
      this.layout = this.layout ? this.layout : 'bottom';
      this.icon_min = this.icon_min ? this.icon_min : 32;
      //32
      this.icon_max = this.icon_max ? this.icon_max : 96;
      //96
      this.icon_spacing = this.icon_spacing ? this.icon_spacing : 2;
      this.span = this.span ? this.span : getSpan();
      this.amplitude = this.amplitude ? this.amplitude : getAmplitude();
      this.ratio = Math.PI/2/this.span;
   }
   private function getSpan():Number {
      return (this.icon_min-16)*(240-60)/(96-16)+60;
   }
   private function getAmplitude():Number {
      return 2*(this.icon_max-this.icon_min+this.icon_spacing);
   }
   private function createIcons():Void {
      var i:Number;
      var id:String;
      this.scale = 0;
      this.width = (this.items.length-1)*this.icon_spacing+this.items.length*this.icon_min;
      var left:Number = (this.icon_min-this.width)/2;
      for (i=0; i<this.items.length; i++) {
         this.createEmptyMovieClip(String(i), i+10).attachMovie(this.items[i].id, '_mc', 1);
         this[i]._mc._y = -this.icon_size/2;
         this[i]._mc._rotation = -this._rotation;
         this[i]._x = this[i].x=left+i*(this.icon_min+this.icon_spacing)+this.icon_spacing/2;
         //2
         this[i]._y = -this.icon_spacing;
         this[i].onRelease = launchIcon;
         this[i].onRollOver = Efecto;
         this[i].onRollOut = Sale;
         this[i].useHandCursor = true;
      }
   }
   private function launchIcon():Void {
      this._parent.callback(this._parent.items[this._name].label);
   }
   private function Efecto():Void {
      this._parent.enOver(this._parent.items[this._name].label);
   }
   private function Sale():Void {
      this._parent.enOut(this._parent.items[this._name].label);
   }
   private function setLayout():Void {
      switch (this.layout) {
      case 'left' :
         this._rotation = 90;
         break;
      case 'top' :
         this._rotation = 180;
         break;
      case 'right' :
         this._rotation = 270;
         break;
      default :
         this._rotation = Number(this.layout);
      }
   }
   private function checkBoundary():Boolean {
      var buffer:Number = 4*this.scale;
      return (this.ymouse<0) && (this.ymouse>-2*this.icon_spacing-this.icon_min+(this.icon_min-this.icon_max)*this.scale) && (this.xmouse>this[0]._x-this[0]._width/2-this.icon_spacing-buffer) && (this.xmouse<this[this.items.length-1]._x+this[this.items.length-1]._width/2+this.icon_spacing+buffer);
   }
   private function updateTray():Void {
      var x:Number;
      var w:Number;
      x = this[0]._x-this[0]._width/2-this.icon_spacing;
      w = this[this.items.length-1]._x+this[this.items.length-1]._width/2+this.icon_spacing;
      this['tray_mc']._x = x;
      this['tray_mc']._width = w-x;
   }
   private function monitorDock():Boolean {
      var i:Number;
      var x:Number;
      var dx:Number;
      var dim:Number;
      // Mouse did not move and Dock is not between states. Skip rest of the block.
      if ((this.xmouse == this._xmouse) && (this.ymouse == this._ymouse) && ((this.scale<=0.01) || (this.scale>=0.99))) {
         return false;
      }
      // Mouse moved or Dock is between states. Update Dock.    
      this.xmouse = this._xmouse;
      this.ymouse = this._ymouse;
      // Ensure that inflation does not change direction.
      this.trend = (this.trend == 0) ? (checkBoundary() ? 0.25 : -0.25) : (this.trend);
      this.scale += this.trend;
      if ((this.scale<0.02) || (this.scale>0.98)) {
         this.trend = 0;
      }
      // Actual scale is in the range of 0..1    
      this.scale = Math.min(1, Math.max(0, this.scale));
      // Hard stuff. Calculating position and scale of individual icons.
      for (i=0; i<this.items.length; i++) {
         dx = this[i].x-this.xmouse;
         dx = Math.min(Math.max(dx, -this.span), this.span);
         dim = this.icon_min+(this.icon_max-this.icon_min)*Math.cos(dx*this.ratio)*(Math.abs(dx)>this.span ? 0 : 1)*this.scale;
         this[i]._x = this[i].x+this.scale*this.amplitude*Math.sin(dx*this.ratio);
         this[i]._xscale = this[i]._yscale=100*dim/this.icon_size;
      }
      // Resize tray to contain icons.
      updateTray();
      return true;
   }
}

Mi problema es como puedo acceder al objeto dockTemplate donde tengo los items y llegar a la opcion de Musica para que pase al siguiente estado, con un gotoAndStop(2);
Espero que puedan ayudarme ?
SAludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 02 Ago 2007 03:13 am
hola que tal joshuavw!!! perdona si me equivoco pero creo que esa clase ya la habia visto, es la clase que genera un Dock identico al de Mac? bueno mira los eventos de linea de tiempo no pueden ejecutarse directamente en una clase, en lugar de eso debes encontrar alguna otra forma de pasar de icono en icono quizas si pudieras escribir algun metodo en tu clase como selectedIndex para poder seleccionar cierto icono

saludos!!

Por andres_santos

236 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Ago 2007 07:09 am
Perdona, pero con todo respeto. ¿Donde aprendiste a declarar un array asi? y otra ¿el array asi escrito te funciona (Pasando por alto tu problema)?

No lo se pero tal vez llegues a tu item música asi.

menu_mc.items[7][1]

Tal vez no lo se, es la primera vez que veo que alguien declara asi un array. Tal vez te pueda servir un tutorial que existe por aquí acerca de arrays bidimensionales. bye

Por Gz.Francisco

378 de clabLevel



Genero:Masculino  

Programador economista y buzo

firefox
Citar            
MensajeEscrito el 02 Ago 2007 01:52 pm
Hi que tal gracias por el interes de contestarme, pues despues de tantas vueltas y pruebas lo que hice es claro saber el nombre que le asignaba de instancia a cada uno de mis movie clip y asi poder saber que nombre de instancia a cada icono, en la funcion de createIcons en el codigo

Código :

this.createEmptyMovieClip(String(i), i+10).attachMovie(this.items[i].id, '_mc', 1);

y bueno al final de cuentas si checan el codigo todo el menu se llama menu_mc, cosa que al final era menu_mc.1, menu_mc2,etc para no hacerles el cuento largo, ok ya encontre mi ruta lo que queria el final era pasar de un estado de movieclip a otro con este code:

Código :

case 'Musica:
menu_mc[String(7)].gotoAndStop(2);
break;

Cosa que no hacia, le puse menu_mc[String(7)].nextFrame(); y tampoco hasta hice una prueba poniendo un movie clip dentro de este mismo, y por algun motivo no podia acceder mas alla de la ruta menu_mc.7, pero si podia ejecutar propiedades como:

Código :

menu_mc[String(7)]._visible = false
menu_mc[String(7)]._alpha = 50

y otras mas al final de cuentas lo que hice es que en cada movieclip que estaba vinculados a mi biblioteca cree un boton y ahi mando a llamar a mis funciones

Código :

function releaseBts(numBt){
   switch(numBt)
   {
    case 0:
    trace("Acciones 0");
    break;
    case 1:
    trace("Acciones 1");
    break;
    case 2:
    trace("Acciones 2");
    break;
    case 3:
    trace("Acciones 3");
    break;
    case 4:
    trace("Acciones 4");
    break;
    case 5:
    trace("Acciones 5");
    break;
    case 6:
    mcBloqueo._visible = true;
    loadMovie("Salir.swf","mcPopup");
    break;
    case 7:
    ParaMusica();
    break;
   }
}
//
function rolloverBts(numBt){
   efectoSonido("sonido2");
   switch(numBt)
   {
    case 0:
    templateTip("Cadenas alimenticias");
    break;
    case 1:
    templateTip("Ciclo del agua");
    break;
    case 2:
    templateTip("Ciclo de la vida");
    break;
    case 3:
    templateTip("Contaminación");
    break;
    case 4:
    templateTip("Nuestra misión / Actividades");
    break;
    case 5:
    templateTip("Glosario");
    break;
    case 6:
    templateTip("Salir");
    break;
    case 7:
    templateTip("Musica");
    break;
   }
}
//
function rolloutBts(){
myToolTip.hide();
myToolTip.resetColor();
myToolTip.defaultSettings();
}

y en los movie clips hice un boton dentro de ellos y solo le puse el llamada de mis funciones ejemplo el que queria de musica:

Código :

on (release) {
   _parent._parent._parent.releaseBts(7);
   if (_parent._parent._parent.parar == true) {
      mcLinea._visible = true;
   } else {
      mcLinea._visible = false;
   }
}
on (rollOver) {
   _parent._parent._parent.rolloverBts(7);
}
on (rollOut) {
   _parent._parent._parent.rolloutBts();
}

ASi me funciono solamente, pero de que no pude acceder mas alla de menu_mc.7 por alguna razon no lo hace y si saben como hacerlo me dicen como para no quedarme con la duda
y para fraggz si me funciona y donde aprendi a declararlo jeje pues igual yo aprendi que hay otras formas de hacerlo.
Saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 02 Ago 2007 03:46 pm
Hi que tal una preguna como puedo eliminar el onEnterframe que esta dentro de la clase Dock.as

Código :

function Dock() {
      setParameters();
      setLayout();
      createIcons();
      onEnterFrame = monitorDock;
   }

ya que al dar clic a otra opcion esta sigue ejecutando y por consiguiente al entrar otro movieclip mi animacion se alenta
Gracias

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 02 Ago 2007 03:52 pm
hola que tal joshuavw!!! puedes detenerlo usando delete por ejemplo

delete enterFrame;

si quisieras borrar el enter frame de un mc:

delete un_mc.enterFrame

Por andres_santos

236 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Ago 2007 04:31 pm
mmm no es
delete onEnterFrame; ?
Bueno ya lo intente y si me funciona
delete menu_mc.onEnterFrame
pero se queda en la animacion donde se quedo, ¿ como puedo acceder a una funcion de la clase Dock.as llamada updateTray():Void, que es donde reseteo para que vuelva a su tamaño original, se que en vez de privada la funcion la tengo que volver publica pero como la deberia de llamar desde mi archivo de Flash ya intente
new updateTray pero no me funciona imagino que se tiene que llamar de otra forma ya que la clase es un
class Dock extends MovieClip
Saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 02 Ago 2007 05:50 pm
hola joshuavw! bueno mira la opcion que te di solo borra el enterFrame pero si el aumente que hiciste fue con una operacion de raton, entonces tienes que poner un metodo para eso algo que reduzca el tamaño.... haaa ya vi ya la hiciste bueno entonces si estas extendiendo a tu MC solo usa el nombre de instancia de este y llama la funcion por ejemplo:

Código :

mc_de_dock.updateTray()

listo

salduos!!!

Por andres_santos

236 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Ago 2007 06:12 pm
pues ya lo hice pero no me lo hace, no se si entendi mal , es el nombre de mi class extends MovieClip ?

Código :

Dock.updateTray();

donde mi
si es asi me sale un error como este
**Error** Símbolo=mcP, capa=as, fotograma=1:Línea 79: La propiedad a la que se hace referencia no cuenta con el atributo estático.
Dock.updateTray();
o es donde se ejecuta el clip ? que es

Código :

menu_mc.updateTray()

Saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7
Citar            
MensajeEscrito el 02 Ago 2007 06:30 pm
hola joshuavw!! no no es el nombre de tu clase si fuera asi seria una clase estatica y no lo es, tienes que referirte al nombre DE INSTANCIA que le pones para que aparesca en el stage

saludos!!!

Por andres_santos

236 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Ago 2007 06:44 pm
osea el nombre de instancia cuando lo atacheo

Código :

this.attachMovie('Dock', 'menu_mc', 1, dockTemplate);
 

osea

Código :

menu_mc.updateTray()

ya lo probe y nomas no lo hace
Saludos

Por joshuavw

Claber

306 de clabLevel



Genero:Masculino  

Juego, aprendo y programo

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.