Comunidad de diseño web y desarrollo en internet online

ayuda por favor

Citar            
MensajeEscrito el 14 Ene 2009 10:29 am
Hola! vuelvo a estar en apuros :(

Estoy haciendo un juego en el que tengo un arpon con el que se deben disparar sobre unas burbujas. Quiero que cuando el mouse haga click sobre una de estas burbujas, la flecha se dirija progresivamente hacia esas coordenadas.

Me he dado cuenta que despues de tanto tiempo soy incapaz de pensar matemáticamente y por mucho que estoy intentado encontrar la solucion al problema no la encuentro. He probado ya todo tipo de operaciones y nada. La últimas es la siguiente, a ver que os parece. Seguramente es una barbaridad lo que he puesto :P

Código :

onClipEvent(load){
   d=_root.flecha;
}

this.onMouseDown=function(){
      _root.flecha.play();
      vx=(d._x+=1);
      vy=(d._y+=1);
      dx=_root._xmouse-d._x;
      d._x=dx/vx;
      dy=_root._ymouse-d._y;
      d._y=dy/vy;
            
}


ah! por si acaso, decir que el codigo lo estoy metiendo todo en un mc controlador que tengo puesto en escena fuera de los márgenes.

Y otra dudilla que tambien tengo es que una vez desplazo la flecha queiro que se vuelva a cargar en la posicion original, no en la actual.

Un saludo! Os agradecería muchisimo vuestra ayuda, porfavor

Por ALEGNA_21

19 de clabLevel



 

safari
Citar            
MensajeEscrito el 14 Ene 2009 05:15 pm
Bueno, es algo sencillo y creo que el código no necesita una mayor explicación. Solamente que "arpón" es el objeto que disparas, y que "objetivo" obviamente es el destino al que "arpón" llegara.

Código ActionScript :

var xDelta:Number, yDelta:Number, angle:Number, speed:Number = 5;
//
onEnterFrame = function(){
   xDelta = arpon._x-objetivo._x;
   yDelta = arpon._y-objetivo._y;
   angle = -Math.atan2(xDelta, yDelta);
   //
   arpon._y -= speed*Math.cos(angle);
   arpon._x += speed*Math.sin(angle);}


Saludos!

Por M@U

BOFH

6210 de clabLevel

34 tutoriales
5 articulos

Genero:Masculino   Héroes Bastard Operators From Hell Editores

Bate jubilado de Cristalab

firefox
Citar            
MensajeEscrito el 14 Ene 2009 06:02 pm
Muchas gracias pro contestar, pero no me va. No se si es que no coloco bien el codigo o que. Porque se supone que lo que tu me has dado es para introducirlo en el mc controlador no? o tendria que ponerlo en la linea de tiempo.

Luego a parte, el objetivo deben ser las coordenadas del mouse, que ocmo en este caso lo he substituido por un mc al que llamo cursor, ¿podria decirle que se dirija a las coordenadas de este no?. Y en lugar de arpon, sería el mc flecha el que tendria que desplazarse.

Mira a ver si asi lo he puesto bien.

Código :

onClipEvent(load){
   var contador = 0;
   var xDelta:Number;
   var yDelta:Number;
   var angle:Number;
   var speed:Number = 5; 
}

onClipEvent(enterFrame){
   if((contador++)&&(contador%50==0)){
   //también se podria poner más resumido(++contador%50==00)
      invasor=attachMovie("burbuja","burbuja"+contador,contador);
      invasor._x=Math.random()*500;
      invasor.vida=1;
      invasor.onEnterFrame = function(){
         this._y += 3;
         if(this._y > 470) removeMovieClip(this);
      }
   }
   var objetivo=eval(_root.cursor), var xDelta:Number, yDelta:Number, angle:Number, speed:Number = 5; 
   // 
   this.onMouseDown = function(){    
      xDelta = flecha._x-objetivo._x;    
      yDelta = flecha._y-objetivo._y;    
      angle = -Math.atan2(xDelta, yDelta);    
      //    
      flecha._y -= speed*Math.cos(angle);    
      flecha._x += speed*Math.sin(angle);
      }
}


MUCHAS GRACIAS, DE VERDAD

Por ALEGNA_21

19 de clabLevel



 

msie7
Citar            
MensajeEscrito el 14 Ene 2009 06:31 pm
Por un par de razones no te funcionara como lo tienes, la primera es por que ejecutas el código en un evento onMouseDown por lo que sera ejecutado una sola vez por muuuy poco tiempo, por ello no podrás ver el movimiento. La otra depende en que MC lo hayas puesto ya que si lo pusiste dentro de flecha u objetivo debes ajustar las rutas.

Por M@U

BOFH

6210 de clabLevel

34 tutoriales
5 articulos

Genero:Masculino   Héroes Bastard Operators From Hell Editores

Bate jubilado de Cristalab

firefox
Citar            
MensajeEscrito el 14 Ene 2009 06:33 pm
Por un par de razones no te funcionara como lo tienes, la primera es por que ejecutas el código en un evento onMouseDown por lo que sera ejecutado una sola vez por muuuy poco tiempo, por ello no podrás ver el movimiento. La otra depende en que MC lo hayas puesto ya que si lo pusiste dentro de flecha u objetivo debes ajustar las rutas.

Eso, sin mencionar de que tu código me devuelve un error por eval.

Por M@U

BOFH

6210 de clabLevel

34 tutoriales
5 articulos

Genero:Masculino   Héroes Bastard Operators From Hell Editores

Bate jubilado de Cristalab

firefox
Citar            
MensajeEscrito el 14 Ene 2009 06:39 pm
vale he cambiado onmouseDown, por el enterFrame que tu me habias puesto en un principio.

El codigo como todo el resto lo he puesto dentro de mc controlador que tengo fuera del escenario. Pero claro, el lio para mi bien porque el objetivo para mi es el punto en el que se encuentre el cursor, y entonces como le digo yo a la variable objetivo que substituya al cursor?

Siento las molestias, deverdad! Y una vez más, gracias!

Por ALEGNA_21

19 de clabLevel



 

msie7
Citar            
MensajeEscrito el 14 Ene 2009 06:42 pm
Prueba con esto, solamente debes adecuarlo un poco:

Código ActionScript :

onClipEvent(load)
{
   var xDelta:Number;
   var yDelta:Number;
   var angle:Number;
   var speed:Number = 5;
   var able:Boolean = false;
}
//
onClipEvent(mouseDown)
{
   able = true;
}
//
onClipEvent(enterFrame)
{
   if(able)
   {
      xDelta = this._x-_parent.objetivo._x;    
      yDelta = this._y-_parent.objetivo._y;    
      angle = -Math.atan2(xDelta, yDelta);    
      //
      this._y -= speed*Math.cos(angle);    
      this._x += speed*Math.sin(angle);
   }
}

Por M@U

BOFH

6210 de clabLevel

34 tutoriales
5 articulos

Genero:Masculino   Héroes Bastard Operators From Hell Editores

Bate jubilado de Cristalab

firefox
Citar            
MensajeEscrito el 14 Ene 2009 07:38 pm
Nada no funciona. De todas formas ahora he encotnrado otro codigo que si que hace lo que quiero mas o menos, solo que cuando la flecha alcanza esas coordenadas, evidentemente se queda ahi. Y yo lo que quiero es que se descargue y vuelva a su punto de origen, para que haga el efecto de que el arma vuelve a cargarse y prepararse para un nuevo disparo.

De momento tengo esto puesto en el ft 1 de la linea de tiempo general, por si te apatece echarle un vistazo.

Gracias por todo.

Código :


if(!flecha1){
   ataque=attachMovie("flecha","flecha1",400);
   ataque._x=arpon._x;
   ataque._y=arpon._y;
}
      
this.onMouseDown = function() {
   flecha._x = _xmouse;
   flecha._y= _ymouse;
}
this.onEnterFrame = function() {
   flecha._x = (x+xfin)/2;
   flecha._y = (y+yfin)/2;
}


A lo de attachmovie no le prestes mucha atencion porque es lo que estoy añadiendo yo para conseguir que la flecha se cargue cada vez en el mismo punto de origen. Pero aun estoy mriando como hacerlo. Si tienes alguna idea no estaría mal que me la hicieras llegar :P

Por ALEGNA_21

19 de clabLevel



 

msie7
Citar            
MensajeEscrito el 14 Ene 2009 08:59 pm
Juas! ¿Como que no te funciona si lo acabo de hacer en base al primer código que mostraste? y funciono sin problemas.
:wtf:

En el código que muestras ademas falta definir yfin y xfin. Ahora, también puedes probar con un hitTest con el objetivo que una vez que se cumpla se devuelva hacia su origen.
:wink:

Por M@U

BOFH

6210 de clabLevel

34 tutoriales
5 articulos

Genero:Masculino   Héroes Bastard Operators From Hell Editores

Bate jubilado de Cristalab

firefox
Citar            
MensajeEscrito el 15 Ene 2009 09:59 am
Joeeer....me estoy volviendo loca :zzz:

A ver, al final he puesto el codigo que me diste en un principio y vale...va progresivamente haciando donde he clicado, pero tras el primer click sigue al raton todo el rato. Y yo lo que quiero es que al clicar sobre una burbuja se dirija hacia esas coordenadas y que una vez llegado alli se descargue y se vuelva a cargar desde el punto de partida, que es donde esta el arpón.

Gracias por todo, de verdad!

Código :

onClipEvent(load) 
{ 
   var xDelta:Number; 
   var yDelta:Number; 
   var angle:Number; 
   var speed:Number = 5; 

   
} 

onClipEvent(enterFrame){
   if((contador++)&&(contador%50==0)){
   //también se podria poner más resumido(++contador%50==00)
      invasor=attachMovie("burbuja","burbuja"+contador,contador);
      invasor._x=Math.random()*500;
      invasor.vida=1;
      invasor.onEnterFrame = function(){
         this._y += 3;
         if(this._y > 470) removeMovieClip(this);
      }
   }
onMouseDown= function(){
      _root.flecha.play();
      _root.flecha.onEnterFrame=function(){
         xDelta = _root.flecha._x-_xmouse;     
            yDelta = _root.flecha._y-_ymouse;     
            angle = -Math.atan2(xDelta, yDelta);     
            // 
            _root.flecha._y -= speed*Math.cos(angle);     
            _root.flecha._x += speed*Math.sin(angle);
      }
   }
}

Por ALEGNA_21

19 de clabLevel



 

safari

 

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