Comunidad de diseño web y desarrollo en internet online

Problema con attachMovie y empyMovieClip

Citar            
MensajeEscrito el 11 Jul 2012 06:42 pm
Un saludo, y como siempre, necesito ayuda, k mal...

Tengo un proyecto, se trata de crear enemigos con una visión, (vista). Pero el problema, es que no consigo que se le asignen su vista a cada uno... Miren, solo tengo un MovieClip de la biblioteca y este esta se llama "per" y otro llamado "suelo_mc" para que caiga ahí, cada vez que hago clic.

Aca el código para que me entiendan:

Código ActionScript :

grav = 0.5;
n = 0;
l = 0;
v_dist = 120;
v_step = 100;
v_ang = 45;
v_angStep = 5;
onMouseDown = function() {
   if (n>1000 or l>1000) n = l = 1;
   ++n;
   ++l;
   per_mc = attachMovie("per", "per_"+n, n+l, {_x:_xmouse, _y:_ymouse});
   per_mc.yvel = 0;
   per_mc.maxyvel = 10;
   _root.createEmptyMovieClip("light", l+l+n);
   per_mc.onEnterFrame = function() {
      this.yvel += _root.grav;
      if (Key.isDown(Key.LEFT)) {
         this._x -= 5;
      }
      if (Key.isDown(Key.RIGHT)) {
         this._x += 5;
      }
      while (_root.suelo_mc.hitTest(this._x, (this._y+this.yvel)+20, true)) this._y -= _root.grav;
      while (_root.suelo_mc.hitTest(this._x+20, this._y, true)) this._x -= 5;
      while (_root.suelo_mc.hitTest(this._x-20, this._y, true)) this._x += 5;
      this._y += this.yvel;
      if (this.yvel>this.maxyvel) this.yvel = this.maxyvel;
      else if (this.yvel<-this.maxyvel) this.yvel = -this.maxyvel;
      // Vista
      dist_x = _root._xmouse-this._x;
      dist_y = _root._ymouse-this._y;
      angle = Math.atan2(dist_y, dist_x);
      _root.light.clear();
      _root.light.lineStyle(1, 0xff0000);
      for (x=0; x<=_root.v_ang; x += (_root.v_ang/_root.v_angStep)) {
         _root.light.moveTo(this._x, this._y);
         l_ang = angle/(Math.PI/180)-(_root.v_ang/2)+x;
         l_ang = l_ang*(Math.PI/180);
         for (y=1; y<=_root.v_step; y++) {
            if (_root.suelo_mc.hitTest(this._x+(_root.v_dist/_root.v_step*y)*Math.cos(l_ang), this._y+(_root.v_dist/_root.v_step*y)*Math.sin(l_ang), true)) {
               break;
            }
         }
         _root.light.lineTo(this._x+(_root.v_dist/_root.v_step*y)*Math.cos(l_ang), this._y+(_root.v_dist/_root.v_step*y)*Math.sin(l_ang));
      }
      // remover
      if (this._y > 480) {
         this.removeMovieClip();
         _root.light.removeMovieClip();
      }
   };
};


El asunto es que cuando yo hago clic, debería aparecer un enemigo con su propia visión. El problema es que todas las visiones, se le quedan al primer símbolo que aparece, que podría hacer para asignarle a cada uno su propia visión.

De igual forma cuando supere el límite del escenario, eliminte su visión, sin afectar las demás.

Me ayudaría mucho una respuesta. Un saludo!

Esta vez anexo una gracias de las veces que me han ayudado!

Por peon007

40 de clabLevel



Genero:Masculino  

Programador & Dibujante

chrome
Citar            
MensajeEscrito el 12 Jul 2012 02:23 pm
El código es bien dif'icil. ¿Que quieres decir con "retener visión"? ¿Un MovieClip que no se posiciona correctamente?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Jul 2012 07:35 pm

solisarg escribió:

El código es bien dif'icil. ¿Que quieres decir con "retener visión"? ¿Un MovieClip que no se posiciona correctamente?

Jorge


Hola Jorge, lo que sucede con el código, es que cuando aparece un MovieClip, (el personaje), deberá aparecer con su visión propia, (el empyMovieClip), cuando aparece el primer MovieClip, aparece con su propias líneas de "visión", pero, cuando hago aparecer el segundo personaje, las líneas del segundo empyMovieClip, se van con el primer MovieClip que apareció, en vez de quedarse con el que acaba de aparecer.

La pregunta es, ¿cómo le hago para que cada quien tenga su propia visión, sin que el primer símbolo se la lleve, de igual forma, al eliminarse el primer símbolo con sus líneas, no elimine las demás líneas de empyMovieClip?

Un saludo, y espero ahora sí haberme explicado bien. Gracias por la respuesta.

Por peon007

40 de clabLevel



Genero:Masculino  

Programador & Dibujante

chrome
Citar            
MensajeEscrito el 12 Jul 2012 07:42 pm
Considerá unificar la jerarquía dentro de un solo elementom creas el personaje y el otro clip en _root, es decir tenes dos elementos en vez de uno para controlar. Luego veo tu código lleno de referencias a _root, es decir le falta encapsulación en los dos sentidos: economía de elemtos y encapsulación. Intenta esto:

- No tener _root por ningún lado .... mejor aún, si haces loadMovie de tu peli desde otra debería seguir funcionando.
- Tener todos los elementos de un personaje (menos las cosas que dispáre si es que dispara) dentro de un solo MovieClip

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Jul 2012 07:52 pm

solisarg escribió:

Considerá unificar la jerarquía dentro de un solo elementom creas el personaje y el otro clip en _root, es decir tenes dos elementos en vez de uno para controlar. Luego veo tu código lleno de referencias a _root, es decir le falta encapsulación en los dos sentidos: economía de elemtos y encapsulación. Intenta esto:

- No tener _root por ningún lado .... mejor aún, si haces loadMovie de tu peli desde otra debería seguir funcionando.
- Tener todos los elementos de un personaje (menos las cosas que dispáre si es que dispara) dentro de un solo MovieClip

Jorge


Bueno, si dispara y hace otras funciones, como seguimiento a un símbolo, etc, pero como ahora no es lo vital para el símbolo, no lo agregué, ya que me interesa resolver solo este problema, pero voy a intentar lo que dices, ahí si me surge una duda, lo pondré acá.

Un saludo, y gracias por la respuesta rápida!

Por peon007

40 de clabLevel



Genero:Masculino  

Programador & Dibujante

chrome
Citar            
MensajeEscrito el 12 Jul 2012 08:17 pm

peon007 escribió:

solisarg escribió:

Considerá unificar la jerarquía dentro de un solo elementom creas el personaje y el otro clip en _root, es decir tenes dos elementos en vez de uno para controlar. Luego veo tu código lleno de referencias a _root, es decir le falta encapsulación en los dos sentidos: economía de elemtos y encapsulación. Intenta esto:

- No tener _root por ningún lado .... mejor aún, si haces loadMovie de tu peli desde otra debería seguir funcionando.
- Tener todos los elementos de un personaje (menos las cosas que dispáre si es que dispara) dentro de un solo MovieClip

Jorge


Bueno, si dispara y hace otras funciones, como seguimiento a un símbolo, etc, pero como ahora no es lo vital para el símbolo, no lo agregué, ya que me interesa resolver solo este problema, pero voy a intentar lo que dices, ahí si me surge una duda, lo pondré acá.

Un saludo, y gracias por la respuesta rápida!


Pude arreglar la parte donde la vista se queda con un símbolo y se remueva con el, es decir, ya cada quién tiene su propia visión y se elimina junto con este mismo, pero el problema es que no se posiciona correctamente en el centro, la visión rota alrededor de el :lol:

¿Cómo la pongo correctamente en el centro?, anexo el código AS2;

Código ActionScript :

grav = 0.5;
n = 0;
l = 0;
v_dist = 150;
v_step = 100;
v_ang = 45;
v_angStep = 2;
onMouseDown = function() {
   if (n>1000 or l>1000) n = l = 1;
   ++n;
   ++l;
   per_mc = attachMovie("per", "per_"+n, n+n+l, {_x:_xmouse, _y:_ymouse});
   per_mc.createEmptyMovieClip("v", l);
   per_mc.onEnterFrame = function() {
      //Posiciones y Velocidades
      pos_x = this._x;
      pos_y = this._y;
      this.yvel += _root.grav;
      //Acciones
      if (Key.isDown(Key.UP) and this.salto) this.yvel -= 10;
      if (Key.isDown(Key.LEFT)) this._x -= 5;
      else if (Key.isDown(Key.RIGHT)) this._x += 5;
      //Condición del salto
      if (suelo_mc.hitTest(this._x, this._y+21, true)) this.salto = true;
      else this.salto = false;
      //Colisión con suelo
      while (suelo_mc.hitTest(this._x, (this._y+this.yvel)+20, true)) this._y -= grav;
      while (suelo_mc.hitTest(this._x+20, this._y, true)) this._x -= 5;
      while (suelo_mc.hitTest(this._x-20, this._y, true)) this._x += 5;
      //Velocidad Y
      this._y += this.yvel;
      if (this.yvel>this.maxyvel) this.yvel = this.maxyvel;
      else if (this.yvel<-this.maxyvel) this.yvel = -this.maxyvel;
      //Vista y ángulo
      dist_x = _root._xmouse-this._x;
      dist_y = _root._ymouse-this._y;
      ang = Math.atan2(dist_y, dist_x);
      this._rotation = ang/(Math.PI/180);
      //La visión
      this.v.clear();
      this.v.lineStyle(1, 0x000000);
      for (x=0; x<=v_ang; x += (v_ang/v_angStep)) {
         this.v.moveTo(pos_x, pos_y);
         l_ang = ang/(Math.PI/180)-(v_ang/2)+x;
         l_ang = l_ang*(Math.PI/180);
         for (y=1; y<=v_step; y++) {
            if (suelo_mc.hitTest(pos_x+(v_dist/v_step*y)*Math.cos(l_ang), pos_y+(v_dist/v_step*y)*Math.sin(l_ang), true)) {
               break;
            }
         }
         this.v.lineTo(pos_x+(v_dist/v_step*y)*Math.cos(l_ang), pos_y+(v_dist/v_step*y)*Math.sin(l_ang));
      }
      //Remover
      if (this._y > 480) {
         this.v.removeMovieClip();
         this.removeMovieClip();
      }
   };
};


Un saludo!

Por peon007

40 de clabLevel



Genero:Masculino  

Programador & Dibujante

chrome
Citar            
MensajeEscrito el 12 Jul 2012 09:07 pm
Al ponerse dentro del clip, el plano de coordenadas pasa de global a local, con lo cual los algoritmos también. Yo con 10 lineas de código me quedo visco, y si son algoritmos con 5 ya no entiendo nada. Dejo a matrix para que mire tus algoritmos, yo solo tiro ideas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Jul 2012 09:26 pm

solisarg escribió:

Al ponerse dentro del clip, el plano de coordenadas pasa de global a local, con lo cual los algoritmos también. Yo con 10 lineas de código me quedo visco, y si son algoritmos con 5 ya no entiendo nada. Dejo a matrix para que mire tus algoritmos, yo solo tiro ideas

Jorge


Gracias, por tus ideas, espero la respuesta, porque ya no se me ocurre otra cosa para arreglar la posición :lol:

Por peon007

40 de clabLevel



Genero:Masculino  

Programador & Dibujante

chrome

 

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