Comunidad de diseño web y desarrollo en internet online

Crear el mismo objeto pero separarlo con un id? es posible?

Citar            
MensajeEscrito el 13 Nov 2010 01:02 pm
Hola, tengo ganas de hacer algo en ac3 y se me plantó la idea de hacer un jueguito con varios enemigos contra uno y todo eso pero no entiendo como hacer para que la clase "enemigo" se comporte de diferentes maneras según patrones que le de y que sean varios, es decir, que 4 o 5 enemigos se me vengan de forma diferente, me ataquen de forma diferente y eso pero no creo que la solución sea crear una clase para cada enemigo... sino crear una, darle parámetros y diferenciarlas por ID pero no sé donde y cómo se haría esta identificación presente....



Muchas gracias a todos!
Saludos

Por Leganz

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 13 Nov 2010 03:02 pm
Hola, si, es posible, y hay varias maneras de hacerlo...
1: puedes crear una clase base, y crear clases para cada enemigo que hereden de ella.
2: puedes crear una clase y muchas funciones que pidan el id que necesitas, según el id comportarse de manera distinta;

Código ActionScript :

public function comportamiento( id:int):void{
    switch (id) {
       case 0:
       break;
       case 1:
       break;
       // etc etc.
    }
}

Ó incluso usar IF por si lo prefieres, claro que podrías pasar el id directamente al crear una instancia de la clase,

Código ActionScript :

package{
  // imports
  import flash.display.Sprite;
  import flash.events.*;
  public class Enemigo extends Sprite {
    // variables
    public var ID_enemigo:int;
    public function Enemigo (id:int, ...) : void {
      ID_enemigo = id;
    }
    private function engine():void{
      switch (ID_enemigo){
        case 0:
          //aqui te ataca de una manera
        break;
        case 1:
          //aca de otra
        break;
        case 2:
          // y aca de otra manera
        break; //etc.
      }
    }
  }
}

de modo que al crear una instancia de esta clase le puedes pasar el id como parámetro:

Código ActionScript :

var enemigo_1:Enemigo = new Enemigo(1);
var enemigo_2:Enemigo = new Enemigo(0);
var enemigo_3:Enemigo = new Enemigo(2);
// o hacerlo con un bucle como creo que lo harás XD
// el número que les pasamos como parametro corresponde a los cases del switch...

Ese es el modo que quieres usar, pero yo te recomendaría usar clases finales, que hereden de una clase base Enemigo, y que se puedan personalizar a fondo; te da muchas posibilidades de configuración y una mejor organización de el proyecto a nivel de código.
Espero haberte ayudado un poco :D
Hasta Luego!

Por hormy1

Claber

124 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Nov 2010 04:00 pm
buenisimo!

che y al momento de practicar colisiones como sería?

osea, veo que así como lo presentás debería funcionar, si la variable creada pertenece a un objeto debería poder interactuar con colisiones y eso pero qué pasa si yo no soy quien define la creación de los enemigos sino una funcion... es decir, no se pueden crear variables nuevas dentro de una función, cómo haría para crear la variable del enemigo de forma aleatoria ?

Por Leganz

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 Nov 2010 01:02 am
hmm a ver si te entendí bien, lo que quieres saber es cómo hacer para detectar colisiones? o cómo crear la variable del enemigo en forma aleatoria?
te voy a responder lo de la variable aleatoria por que lo de las colisiones no te lo entendí, nuevamente hay varias maneras de lograr esto,
1. puedes crear una variable que gane siempre un valor aleatorio y se asigne al id, teniendo en cuenta la cantidad de enemigos a crear, puesto que creo que la mejor manera de hacerlo sería utilizando una variable para determinar la cantidad y un bucle que se detenga al alcanzarla, pero mejor explicado en código:

Código ActionScript :

var cantidad_de_enemigos_final:int = 10;
var cantidad_de_enemigos_actual:int = 0;
var enemigo:Enemigo;
while (cantidad_de_enemigos_actual < cantidad_de_enemigos_final){
  cantidad_de_enemigos_actual++;
  var id:int = Math.random()*2; //de esto no estoy seguro, pero debe escoger entre 0, 1, y 2 o los casos que tengas,
  // o sea, si no te funciona de ese modo me avisas y te envio una funcion para calcular un número entre un mín y max que 
  // nosotros mismos le pasamos como parámetros.
  enemigo = new Enemigo(id); //aca leestamos pasando el valor de la variable id, que supuestamente es un valor de 0 a 2,
  // o sea que ya es aleatorio
  stage.addChild(enemigo);
}


2. hacer que sea el valor aleatorio directamente desde la clase,

Código ActionScript :

package{ 
  // imports 
  import flash.display.Sprite; 
  import flash.events.*; 
  public class Enemigo extends Sprite { 
    // variables 
    public var ID_enemigo:int; 
    public function Enemigo () : void { 
      private var id:int = Math.random()*2;
      ID_enemigo = id;
    } 
    private function engine():void{ 
      switch (ID_enemigo){ 
        case 0: 
          //aqui te ataca de una manera 
        break; 
        case 1: 
          //aca de otra 
        break; 
        case 2: 
          // y aca de otra manera 
        break; //etc. 
      } 
    } 
  } 
}

Claro que eso ya no te permitiría pasar parámetros al crear la variable y deberías cambiar su definición, pero ya no necesitarías escoger tu mismo o hacer que una funcion escoja el id:

Código ActionScript :

var enemigo:Enemigo = new Enemigo(); 

mucha suerte :D
escribe si tienes cualquier duda, hasta luego!

Por hormy1

Claber

124 de clabLevel



 

firefox
Citar            
MensajeEscrito el 16 Nov 2010 03:45 pm
Hola, muchas gracias por la info.
Creo que no es lo que necesito :( jeje lo que yo decía era algo que me permita crear una cantidad determinada de objetos, osea, tengo la clase del enemigo. la tengo que diferenciar por un id y a ese objeto definido por id darle un nombre. el problema es que no puedo hacerlo tipo var enemigo1:enemigo(1);var enemigo2:enemigo(2); porque no quiero que sea yo quien decida la cantidad de enemigos sino un script pero necesito poder tratar a cada enemigo de forma individual y no veo como puedo crear esas variables que apunten a la clase con determinados parámetros


el asunto sería que un script me genere el equivalente a esto:

Código ActionScript :

var enemigo1:enemigo(1);
var enemigo2:enemigo(2);
var enemigo3:enemigo(3);
var enemigo4:enemigo(4);
var enemigo5:enemigo(5);
var enemigo6:enemigo(6);


luego poder controlar las reacciones de cada enemigo por medio de la variable, porque si creo a los objetos con la misma variable me toma uno solo y omite la interacción con los demás, obviamente.


Muchas gracias!
Saludos

Por Leganz

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 16 Nov 2010 11:40 pm
Pues solo hazlo en un bucle:

Código ActionScript :

private var enemigos:Array = [];
private var cant_enemigos:uint = 6;
for(var i:uint=0;i<cant_enemigos;i++){
   enemigos.push(new EnemigoClass(i));
}


Todos los objetos dentro del Array enemigos quedan como la clase que has pasado y la referencia completa se mantiene.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 17 Nov 2010 01:33 am
buenísimo hernán!! muchas gracias, me podrías decir como sería para plasmar en pantalla a los enemigos?
osea para manipularlos cómo quedaría el script?

Muchas gracias!
Saludos!

Por Leganz

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 17 Nov 2010 01:54 am
Recuerda que en AS3, todas las referencias son guardadas, ergo, es lo mismo la variable pura que las variables dentro del Array.

En resumen, para hacerlo, aquí te dejo un ejemplo simple:

Código ActionScript :

private var enemigos:Array = []; 
private var cant_enemigos:uint = 6;
private var contenedor:Sprite = new Sprite();
this.addChild(contenedor);
for(var i:uint=0;i<cant_enemigos;i++){ 
   enemigos.push(new EnemigoClass(i));
   contenedor.addChild(enemigos[i]);
   enemigos[i].x = Math.random()*500;
}


Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox

 

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