Comunidad de diseño web y desarrollo en internet online

Una subclase un nivel de profundidad por debajo de la clase

Citar            
MensajeEscrito el 30 Oct 2004 11:01 am
Hola a todos,

estaba creando un juegecillo de naves y me he encontrado con un problemilla de diseño que no se si se puede solucionar facimente.

Hay una imagen que seria el cañon montado sobre la nave, pero es la clase principal (para controlar las colisiones y distancias). Entonces creo un objeto nave que seria lo que da la apariencia de personaje (aunque en realidad no lo es) y lo creo desde el cañon.

Cañon-nave.

Entonces el problema es que el primero queda oculto por la nave y cambiar la profundidad no soluciona el problema.

Antes de reescribir todo el codigo queria preguntaros a ver si conoceis una forma sencilla de hacerlo.

Por andoni1978

5 de clabLevel



 

unknown
Citar            
MensajeEscrito el 30 Oct 2004 02:53 pm
supongo q ya probaste con swapDepths

Hazte una clase para manejar profundidades

Yo me encontre esta , a ver si tengo ganas y la mejoro un poco :

Código :

class z_ord {
   public var tbl:Array;
   function z_ord() {
      tbl = new Array();
   }
   function register(mc:MovieClip) {
      tbl.push(mc);
      mc.swapDepths(tbl.length-1);
      return tbl.length-1;
   }
   function unregister(mc:MovieClip):Array {
      for (var i = 0; i<=tbl.length; i++) {
         if (tbl[i] == mc) {
            tbl[i].splice(i, 1);
         }
      }
      return tbl;
   }
   function setPosition(mc:MovieClip, index:Number) {
      var tmp_v = tbl[index];
      tbl[index] = mc;
      tbl[index].swapDepths(index);
      tbl[index+1] = tmp_v;
      tbl[index+1].swapDepths(index+1);
      for (var i = tbl.length; i>=index+2; i--) {
         tbl[i] = tbl[i+1];
         tbl[i].swapDepths(i);
      }
   }
   function getPosition(mc:MovieClip) {
      for (var i = 0; i<=tbl.length; i++) {
         if (tbl[i] == mc) {
            var re = i;
         }
      }
      return re;
   }
   function getTotal() {
      return tbl.length;
   }
}


uso en flash

Código :

// on declare la class
var zord = new z_ord();
// on duplique le clip
for (var i = 0; i<=10; i++) {
   var pepe = _root["t"].duplicateMovieClip("t"+i, i);
   pepe._x = i*20;
   // on enregistre le clip ainsi créé
   zord.register(pepe);
   // on va ajouter l'evenement du click sur celui ci
   pepe.onRelease = function (){
      btn_click(this);
   }
}
// fonction appelé lors du click
function btn_click(mc) {
   // on place le clip sur le devant de la scene
   zord.setPosition(mc, zord.getTotal());
}


fuente :

http://www.flashkod.com/code.aspx?ID=20674

Por buho29

510 de clabLevel

1 tutorial

7 ejemplos

 

unknown
Citar            
MensajeEscrito el 31 Oct 2004 09:23 pm
Gracias por el codigo, me puede venir genial para crear una bolita que pase por encima y por debajo de la nave, pero no me arregla el problema porque el flash gestiona la profundiad de manera independiente según al nivel al que este (o esa impresion me ha dado en realidad no tengo ni idea).

De todas formas ya lo he solucionado haciendo que la carcasa de la nave fuera otro objeto que tomara x e y del cañon. Aunque es un tanto engorroso tener que crear un objeto independiente por cada cosa que quiera incluir a la nave (misiles, por ejemplo).

Es que antes de empezar habria tenido que pensar cual va a ser el grafico que va ha estar por debajo de todos los demás para poder después crear objetos dentro de este mismo y aún así tendria que crear un "objeto extraño" (porque en realidad no existe) para controlar las colisiones en el punto centrar de la nave.

// Esto es lo que hago

_level0.cañon._z = 1;
_level0.cañon.carcasaNave._z = 0;

// y continua sin verse porque carcasaNave esta dentro de cañon

//***************************

Seria facilisimo si pudiera cambiar la profundidad directamente desde el propio objeto (por comodidad unicamente).
mucho más comodo algo así vamos:

// _zroot( 'nivelInteriorObjeto','_z')

_level0.cañon._zroot (1,0);
_level0.cañon.carcasaNave._zroot (0,0);
_level0.cañon.disparoRapido._zroot (0,1);

o así:

// si flash gestionase _z automaticamente
// y tendria todo dentro del punto central de la nave
// que es el cañon que dispara desde arriba del todo

_level0.cañon.carcasaNave._zroot--;
_level0.cañon.disparoRapido._zroot--;

//****************

Pero yo no se como se hace, no he encontrado funciones sobre esto y de hecho no se ni si se puede hacer, por eso pregunte.

No te preocupes porque solucionado ya esta ;) ahora todo me cuelga de _level0 y listo.

Por andoni1978

5 de clabLevel



 

unknown
Citar            
MensajeEscrito el 01 Nov 2004 06:04 pm
no uses _level0 ni _root , eso es un mal vicio ...

Usa this o this._parent pero nunca referencias absolutas

solo puedes manejar las profundidades q se encuentra dentro de ese clip , no puede decir q clip0.clip se ponga encima de clip1

insisto prueba la clase q te pase es cojonuda y facil de implantar a qualquier proyecto

my_mc.swapDepths(0) <-- esta se queda debajo de todo

my_mc.swapDepths(1000) <-- se pone en el nivel 1000 todo lo q este debajo de 1000 my_mc lo tapara

Por buho29

510 de clabLevel

1 tutorial

7 ejemplos

 

unknown

 

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