Comunidad de diseño web y desarrollo en internet online

de as2 a as3

Citar            
MensajeEscrito el 31 Ene 2009 03:21 am
saludos a todos

como se pone esta linea en as3

Código ActionScript :

dragon = _root["dragon"+i];


la estoy usando en un for y la variable dragon guarda el nombre del mc que adjunto desde la libreria

Por nasho

Claber

908 de clabLevel

1 tutorial

Genero:Masculino  

Web Developer

firefox
Citar            
MensajeEscrito el 31 Ene 2009 11:51 pm
:? igual? creo, que es "dragon", digo que tipode variable u objeto es?

Por penHolder

Claber

4661 de clabLevel

39 tutoriales
2 articulos

Genero:Masculino   Premio_Secretos

| mdz |

firefox
Citar            
MensajeEscrito el 01 Feb 2009 12:08 am
_root no se usa mas en AS3, si estas ya en el "root" que ahora es stage o [object MainTimeline] puedes guardar la referencia en un Singleton y llamarlo desde cualqueer lado..

pero puedes llamarlo asi :

Código ActionScript :

this[String("dragon"+i)];


pero la mejor forma de implementar acceso al root es desde el root guardar la referencia en un Singleton. Lee cobre los singleton en AS3.

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 02 Feb 2009 04:04 am

Por soullost

2 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Feb 2009 07:55 am

phoxer escribió:

puedes guardar la referencia en un Singleton y llamarlo desde cualqueer lado..
pero la mejor forma de implementar acceso al root es desde el root guardar la referencia en un Singleton. Lee cobre los singleton en AS3.

También puedes coger una cuerda y ahorcarte :(
Vale, partiendo de la base que le tengo una manía al Singelton de los coj.. pido perdón por el exabructo.

En AS.3 ya NO es importante el nombre de instancia. En AS.3 normalmente se tienen variables que hacen referencia a los MCs y esa es la idea que tenemos que mantener.
Así, en AS.2 escribíamos

Código :

//AS.2
for (var i=0;i<10;i++){
    attachMovie("dragonID","dragon"+i,i)
}

En AS.3 haríamos

Código ActionScript :

for (var i=0;i<10;i++){
    var dragon=new Dragon();
    addChild(dragon)
}

Pero con eso perdemos la referencia a los dragones. Así que, qué mejor que guardarlos en un array

Código ActionScript :

//como variable principal
var dragones:Array=new Array()
//en algún momento
for (var i=0;i<10;i++){
    var dragon=new Dragon();
    dragones.push(addChild(dragon));
}
//ahora, en cualquier momento podemos escribir
for (var i=0;i<dragones.length;i++){
    dragones[i].ataca();
}

Vamos, nos es igual el nombre de instancia, tenemos unas variables (en este caso las tenemos dentro de un array) que "hacen referencia" a los dragones. Igualmente tendríamos, p.e. una variable "heroe" que hace referencia a un MovieClip de la Clase Heroe.

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Feb 2009 01:49 am

Eliseo2 escribió:


También puedes coger una cuerda y ahorcarte :(
Vale, partiendo de la base que le tengo una manía al Singelton de los coj.. pido perdón por el exabructo.


No entendí bien lo de la cuerda, pero lo voy a tomar como que tuviste una mala experiencia traumática en la infancia ^^
Yo le dije exactamente lo mismo que tu que simplemente guarde la referencia U_U , quizas no me explique bien.

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 03 Feb 2009 07:51 am

phoxer escribió:

No entendí bien lo de la cuerda, pero lo voy a tomar como que tuviste una mala experiencia traumática en la infancia ^^
Yo le dije exactamente lo mismo que tu que simplemente guarde la referencia U_U , quizas no me explique bien.

Sí tuve malas experiencias traumáticas en la infancia, pero no tiene nada que ver con el asunto del post ni con el Singelton :D .
Creo sinceramente que no es necesario hacer un "Patrón Singelton" para tener en una variable una referencia a un MC o para guardar "root". Sé que hay gente que adora el antiguo _global y el querido _root. Sinceramente creo que es mejor ir dejándolos aunque sea poco a poco aunque ¡¡Libertad para todos!! quien se sienta cómodo que los utilize.
NOTA:Igual que buscar una cuerda y ahorcarse, uno se puede comprar un bosque y perderse o coger la guía de teléfonos y aprendérsela de memoria (por opciones que no quede)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Feb 2009 02:41 pm

Eliseo2 escribió:


Creo sinceramente que no es necesario hacer un "Patrón Singelton" para tener en una variable una referencia a un MC o para guardar "root". Sé que hay gente que adora el antiguo _global y el querido _root. Sinceramente creo que es mejor ir dejándolos aunque sea poco a poco aunque ¡¡Libertad para todos!! quien se sienta cómodo que los utilize...


Ok entiendo tu punto, quizas para algunos proyectos no se nesesiten referencias globales, pero por ejemplo para un juego como utilizas un sistema de score o de tiempo, o por ejemplo si queres comunicarte entre clases o a una funcion general de manjeo del programa, por ejemplo la información de el usuario logueado? (lo pregunto para saber como lo haces nada mas)..

Porque por ejemplo si queres mantener una seción de usuario activa , tenes que guardar en una variable como minimo el ID del usuario, y una de las mejores formas que conosco en AS3 es guardar la referencia en un singleton o en una variable en el "root"..

Pero como estoy abierto a meores ideas, explicame como es que lo haces :)

Saludos.

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 03 Feb 2009 05:04 pm
Buenas

Elseo2 escribió:

En AS.3 ya NO es importante el nombre de instancia. En AS.3 normalmente se tienen variables que hacen referencia a los MCs y esa es la idea que tenemos que mantener.

No te creas q es tan asi.... el nombre de una instancia fue y sigue siendo importante en AS3. Guardar referencias a MCs no provee ninguna mejora (salvo excepciones) y tampoco es la idea q hay q usar en AS3, por favor considera en eliminar esa idea ya q es una falacia...

phoxer escribió:

pero la mejor forma de implementar acceso al root es desde el root guardar la referencia en un Singleton

Creo q te confundis con la implementacion del _global de AS2 en AS3...


Bueno, vamos al grano, nasho, podes hacer lo q necesitas de la siguiente forma
En AS2 si querias referirte a un mc del escenario era como bien decias

Código ActionScript :

var contenedor:MovieClip = _root.dragones;
for ( var i=0; i<10; i++ )
{
    dragones.attachMovie("dragonID","dragon"+i,i)
}
.
.
.
// en otra parte del codigo obtenias un dragon en particular (el nro 5)
var dragon:MovieClip = _root.dragones["dragon" + 5];


Ahora en AS3 seria asi

Código ActionScript :

// agrego un elemento al display list
var mc:MyMovieClip
for ( var i=0; i<10; i++ )
{
    mc = new MyMovieClip()
    mc.id = "dragon" + i;
    mc.name = "dragon" + i;
    this.dragones.contenedor.addChild(mc);
}
.
.
.
// en otra parte del codigo obtenes un dragon en particular (el nro 5)
var dragon:MyMovieClip= this.contenedor.getElementByName("dragon" + 5) as MyMovieClip

(podes reemplazar MovieClip por el nombre de la clase del simbolo)

Tambien podes usar la forma de AS2, pero siempre haciendo referencia a this o this.parent y asi... el _root ya no es reconocido por as3... para llegar a la linea principal deberas moverte por paths relativos (usando this y parent).
Como ves... no es taaaan diferente a como lo era antes... ¿no?

phoxer escribió:

pero por ejemplo para un juego como utilizas un sistema de score o de tiempo, o por ejemplo si queres comunicarte entre clases o a una funcion general de manjeo del programa, por ejemplo la información de el usuario logueado? (lo pregunto para saber como lo haces nada mas)..

Porque por ejemplo si queres mantener una seción de usuario activa , tenes que guardar en una variable como minimo el ID del usuario, y una de las mejores formas que conosco en AS3 es guardar la referencia en un singleton o en una variable en el "root".


Tampoco es la unica, ni la mejor manera de hacerlo... le estas dando mucha importancia a los Singleton, cosa q no se hace... revisa la teoria de patrones de diseño ;)
Por ej... para funciones generales de manejo del programa, utilizaria funciones estaticas dentro de clases o directamente funciones sueltas dentro de un paquete, para usuarios usaria un VO (Value Object) ya q es informacion transversal a toda la aplicacion junto con ulgun manager de usuarios (permisos, datos, etc)...
A donde apunto con esto robert?? es a q no pases todo a un unico singleton, meter todo junto dentro de algo como en as2 (bah.. en as1... en as2 ya tampoco se deberia haber hecho) se hacia en _root o _global, no es la mejor manera de programar... talvez si mas rapida, pero no la ideal...

Eliseo2 escribió:

Sé que hay gente que adora el antiguo _global y el querido _root. Sinceramente creo que es mejor ir dejándolos aunque sea poco a poco aunque ¡¡Libertad para todos!! quien se sienta cómodo que los utilize.

Puede ser.... pero si usan AS3 q lo utilicen bien y no intenten hacer lo mismo q hacian en as2 o as1 en as3... El q quiere seguir con esa manera de programar pues q siga en as2... el cambio a as3 no lo va a favorecer.... al q quiere cambiar pues hay q ayudarlo a q aprenda :) :wink: :D

Bueno, espero q les sirva la ayuda.

Saludos!!!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 03 Feb 2009 09:02 pm

alfathenus escribió:

Tampoco es la unica, ni la mejor manera de hacerlo... le estas dando mucha importancia a los Singleton, cosa q no se hace... revisa la teoria de patrones de diseño ;)
Por ej... para funciones generales de manejo del programa, utilizaria funciones estaticas dentro de clases o directamente funciones sueltas dentro de un paquete, para usuarios usaria un VO (Value Object) ya q es informacion transversal a toda la aplicacion junto con ulgun manager de usuarios (permisos, datos, etc)...


Maldito esteban, el me convenció de usar Singleton jajaja.. y pues es una forma rápida y no creo que sea taaan drástica de referenciar a variables globales, digo que tiene de malo usar una variable global??.. (ojo me puedo equivocar) pero a lo que voy es, porque hacer tanto lio cuando la respuesta y su uso es tan simple..

Por ejemplo como arias un sistema de Puntaje?? (para entenderlo mejor), donde en un juego que tiene varias pantallas y clases, puedas desde todos lados, leer el puntaje del jugador..

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 03 Feb 2009 11:13 pm
Como estas phoxer?

El caso del puntaje de un juego es un poco mas especifico que lo q queria hacer nasho, en este caso cumple bastante bien los requisitos para utilizar Singleton... Posiblemente en gran cantidad de juegos con eso lo solucionarias de una buena manera...
Pero por otro lado, la utilizacion de un Singleton, o sea, el utilizar por todos lados

Código ActionScript :

var puntos:Puntaje = Puntaje.getInstance()

hace q las clases esten muy unidas y no puedas idependizar modulos o clases en otros proyectos... talvez ahi deberias pensar antes de utilizar Singleton en utilizar el patron Dependency Injection y en cada state del juego le pasas la referencia al objeto q contiene los puntos y luego al actualizar el puntaje en algun lado utilizar el patron Observer (as3 lo implementa perfectamente mediante los eventos, o tambien podes crear la clase como bindable y listo) y actualizas de manera automatica todos los puntajes en todos lados...
Otro ejemplo es si estas usando un framework com Cairngorn o PureMVC, aca lo guardarías en un modelo.

Pero bueno.... igual nada esta firmado q una cosa es mejor q otra.... hacerlo de esta manera tambien requiere un poco mas de tiempo y todos sabemos q ese es un factor crucial en la entrega de un trabajo...

No desvirtuemos este post... si queres luego hablamos por msn o la seguimos en otro post :wink:

Abrazo!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 04 Feb 2009 12:03 am
:shock: gracias a todas sus respuestas pero creo que en vez de dragones voy a usar ponnies rosas...

Regresando, los de los dragones ya lo tengo resuelto luego posteo el codigo :roll: aqui en la chamba no lo tengo, pero todavia tengo un problema, a veces se traba el juego... matas un dragon, se pasma y sigues ganando puntos ujuu :lol:

Por nasho

Claber

908 de clabLevel

1 tutorial

Genero:Masculino  

Web Developer

firefox
Citar            
MensajeEscrito el 04 Feb 2009 02:18 am

Código ActionScript :

//---- variables ----
var steps:Number = 5;
var spriteX:Number = 265;
var spriteY:Number = 265;
var speed:Number = 25;
var arrowActive:Boolean = false;
var dragonesNum:Number = 3;
var i:Number = 0;
var score:Number = 0;
var arrows:arrow= new arrow();
var vida:Number = 10;
var vel:Number;

vidas.text=vida;
scores.text = score;
//---- functions ----
function checkKeys(e:KeyboardEvent):void {
   //trace(e.keyCode);
   if (e.keyCode==39 && spriteX<510) {
      spriteX += steps;
      knight.legs.play();
      updatePawel();
   } else if (e.keyCode==37 && spriteX>40) {
      spriteX -= steps;
      knight.legs.play();
      updatePawel();
   }
   if (e.keyCode==38) {
      knight.arms.play();
      
      this.addChild(arrows);
      arrows.x = spriteX;
      arrows.y = spriteY+50;
      arrows.addEventListener(Event.ENTER_FRAME,updateArrow);
   }
}
function updatePawel() {
   knight.x = spriteX;
   knight.y = spriteY;
}
function updateArrow(e:Event):void {
   if (arrowActive == true) {
      e.target.y -= speed;
   }
   if (e.target.y<0) {
      arrowActive = false;
      e.target.removeEventListener(Event.ENTER_FRAME,updateArrow);
      removeChild(e.target);
   }
}
function initDragons(e:Event):void {
   for (i; i<dragonesNum; i++) {
      var dragons = this[String("dragon"+i)];
      dragons = new dragon();
      this.addChild(dragons);
      updateDragons(dragons);
      dragons.addEventListener(Event.ENTER_FRAME,dragoncito);
   }
}
function dragoncito(e:Event):void {
   if (arrows.hitTestObject(e.target)) {
      score += vel;
      scores.text = score;
      arrowActive = false;
      MovieClip(root).arrows.removeEventListener(Event.ENTER_FRAME,updateArrow);
      MovieClip(root).removeChild(arrows);
      updateDragons(e.target);
   } else {
      if (e.target.x>0) {
         e.target.x -= e.target.velo;
      } else {
         updateDragons(e.target);
         vida--;
         vidas.text = vida;
      }
   }
}
function updateDragons(which) {
   //which.gotoAndStop(int(Math.random()*4));
   which.x = int(Math.random()*100)+500;
   which.y = int(Math.random()*80)+20;
   which.velo = vel = int(Math.random()*7)+1;
}
//---- listeners ----
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeys);
stage.addEventListener(Event.ACTIVATE, initDragons);

Por nasho

Claber

908 de clabLevel

1 tutorial

Genero:Masculino  

Web Developer

firefox
Citar            
MensajeEscrito el 04 Feb 2009 07:56 am

alfathenus escribió:

Buenas

Elseo2 escribió:

En AS.3 ya NO es importante el nombre de instancia. En AS.3 normalmente se tienen variables que hacen referencia a los MCs y esa es la idea que tenemos que mantener.

No te creas q es tan asi.... el nombre de una instancia fue y sigue siendo importante en AS3. Guardar referencias a MCs no provee ninguna mejora (salvo excepciones) y tampoco es la idea q hay q usar en AS3, por favor considera en eliminar esa idea ya q es una falacia...


Alfa, reconozco que es una idea que leí por ahí (no creo que lo dedujera). De hecho el nombre de instancia en AS.3 no tiene nada que ver con la propiedad "name", y el único uso que he visto a la propiedad name es usarlo en un getChildByName (instrucción que es bastante más lenta que referirse a un Mc por una variable al tener que recorrerse la displayList). Leí por ahí que, cuando tenemos en nuestra película un MC cuyo "nombre de instancia" es "mimc", lo que hace Flash es traducirlo a una variable que hace referencia al MC. El ejemplo tonto es

Código ActionScript :

//tenemos un MC cuyo nombre de instancia es "mimc"
trace(mimc.name) //<---Instance1

Es más, si no está checkado el "check" de "declarar automáticamente los MCs", debemos declararlo como variables.
No pretendo tener razón, pero como es algo que estoy "constantemente recomendando" pues me parece una putada seguir equivocándome (y, más importante, seguir equivocando a toda la gente que me lea o escuche -que no es mucha, pero eso es otro asunto-). ¿tienes algún link de referencia?

Por Eliseo2

710 de clabLevel



 

firefox

 

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