Comunidad de diseño web y desarrollo en internet online

Control del jugador Point and Click

Citar            
MensajeEscrito el 09 Feb 2011 02:02 am
Buenas noches, llevo un par de meses, aventurandome en la creación de una aventura gráfica, ya había realizado algo con los scripts referentes a plantilllas de sprites.

Esta vez quería usar personajes creados por mi en 3d, crear movieclips con los movimientos y partir de ahí.

Pues bueno no es tan facil como yo creía. El problema me surge ya al principio , tengo un movieclip con 4 frames, en cada uno de ellos tengo 1 movieclip con las diferentes posiciones, lado , frente, espaldas, y esperando.

me está costando sacar la simple programación de que el movieclip reproduzca el frame pertinente, según donde se haya clicado , si es dentro de la altura del movieclip debería ir de lado , si es mayor de frente e inferior de espaldas, bueno pues no consigo encontrar la condición perfecta.

he intentado metiendo tracerts por todos los sitios y ha habido un momento que lo he conseguido , pero ahora vuelve a no ir bien, pero estoy seguro que es mucho más simple de lo que creo.

Adjunto las 2 funciones que he creado para esto .

Código ActionScript :

function detectPosicion() {

         
                  
         if ((mcPerso1.x<clickSpot_x) && (clickSpot_y+180 < mcPerso1.y ) && (clickSpot_y+490 < mcPerso1.y ))   {
            trace (cLados);
            trace (cArriba);
            trace("enladoclick"+ clickSpot_y );
            trace ( "LAdoYperso"+mcPerso1.y ) ;
            mcPerso1.gotoAndStop(1);
            mcPerso1.scaleX=-1;
            mcPerso1.x+=300;
            escalado=true;
         }else{
            trace("enladoclick"+ clickSpot_y );
            trace ( "LAdoYperso"+mcPerso1.y ) 
            mcPerso1.gotoAndStop(1);
            mcPerso1.scaleX=1;
            escalado=false;
            mcPerso1.x-=300;
         }
         if((clickSpot_y < cArriba) && (mcPerso1.y < 0)) {
            trace("enladoclick"+ clickSpot_y );
            trace ( "LAdoYperso"+mcPerso1.y ) 
            mcPerso1.gotoAndStop(2);
         }
         if ((clickSpot_y < cArriba) && (mcPerso1.y > 0)) {
            var prueba:Number= new Number;
            prueba =(mcPerso1.y+490);
            trace (prueba);
            trace(clickSpot_y);
            mcPerso1.gotoAndStop(4);
         }
            


protected function capturadorPuntero(event:MouseEvent):void {

         clickSpot_x=mouseX;
         clickSpot_y=mouseY;
         detectPosicion();
         //TweenLite.to(mcIzki, 1, {x:clickSpot_x, y:clickSpot_y});
         if (escalado == true ) {
            if (ejeZ == false ) {
               TweenLite.to(mcPerso1, 4, {x:clickSpot_x+200, y:clickSpot_y-250, ease:Linear.easeNone, onComplete:posicionEspera});
            }else {
               TweenLite.to(mcPerso1, 4, {x:clickSpot_x+200, y:clickSpot_y-250, ease:Linear.easeNone,scaleX:0.5,scaleY:0.5, onComplete:posicionEspera});
            }

         }else{
            if (ejeZ == false ) {
            TweenLite.to(mcPerso1, 4, {x:clickSpot_x-200, y:clickSpot_y-250, ease:Linear.easeNone, onComplete:posicionEspera});
            }
               
         }




En esas 2 funciones, indico que frame debe estar en play , y luego hago el tween . Lo malo es que jamás consigo que el personaje sea fiel a donde hago el clic y tenga un movimiento mas o menos coherente. Y puestos a pedir ayuda, por si lo véis muy claro , el otro problema que estoy teniendo es a la hora de escalar el personaje cuando suba mas de la mitad de la pantalla, para darle profundiad, había pensado en moverlo sobre el eje Z así ya no tengo que escalarlo pero entonces el movimiento hacia los lados no se me reflejaba igual. Si tenéis algun aporte a esto tb sería de gran ayuda, igualmente sigo comiendome la cabeza.


como siempre muchas gracias.

Por erone

16 de clabLevel



 

msie8
Citar            
MensajeEscrito el 09 Feb 2011 09:13 am

erone escribió:

me está costando sacar la simple programación de que el movieclip reproduzca el frame pertinente, según donde se haya clicado

1.-Si es donde se ha clicado, NO te refieras a la posición mediante

Código ActionScript :

clickSpot_x=mouseX; 
clickSpot_y=mouseY; 

Pues puedes "clickar" y mover el ratón. Usa las "propiedades" de MouseEvent

Código ActionScript :

clickSpot_x=event.stageX; 
clickSpot_y=event.stageY; 

2.-Si estás moviendo un MC, NO uses TweenLite.to (ni ningún Tween) o deberás controlar, si se "clicka" antes de parar el movimiento, de eliminar ese Tween
Para el caso se suelen tener dos variables velx y vely y se usa un ENTER_FRAME
3.-Usa Math.atan2 para hayar el ángulo entre tu MC y el ratón

Código ActionScript :

var ang_rad=Math.atan2(clickSpot_y-mcPerso1.y,clickSpot_x-mcPerso1.x)
velx=Math.cos(ang_rad)*5 // ese 5 es un valor arbitrario
vely=Math.sin(ang_rad)*5

4.-Si quieres echalé un vistazo a Movimientos de personajes en Juegos RPG tipo Zelda

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Feb 2011 10:54 am

erone escribió:

me está costando sacar la simple programación de que el movieclip reproduzca el frame pertinente, según donde se haya clicado , si es dentro de la altura del movieclip debería ir de lado , si es mayor de frente e inferior de espaldas, bueno pues no consigo encontrar la condición perfecta.

Normalmente se suelen hacer con 8 imágenes (si se permite el movimiento en horizontal, vertical y diagonal) o con 4 (sólo están permitidos los movimientos en horizontal y vertical)
Creo que lo podemos solucionar con un operador condicional. Y debería ser -lo debería comprobar-

Código ActionScript :

var difx:Int=clickSpot_x-mcPerson1.x
var dify:Int=clickSpot_y-mcPerson1.y

index=(difx==0)? ((dify>0)?2:3):1 //(*)
mcPerso1.scaleX=(difx>0)? 1 : -1 //(**)
mcPerso1.gotoandStop(index)

(*)Es lo mismo que

Código ActionScript :

if (difx==0){
   if (dify>0){
       index=2
  }else{
      index=3
  }
}else{
    index=1
}

(**)Es lo mismo que

Código ActionScript :

if (difx>0){
    mcPerso1.scaleX=1
}else{
    mcPerso1.scaleX=-1
}

El motivo de usar el operador condicional es que es más rápido (son milésimas de segundos)

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Feb 2011 04:28 pm
Muchísimas gracias, he intentado realizar los cambios, pero no he acabado de entenderlo

donde dices :

"2.-Si estás moviendo un MC, NO uses TweenLite.to (ni ningún Tween) o deberás controlar, si se "clicka" antes de parar el movimiento, de eliminar ese Tween
Para el caso se suelen tener dos variables velx y vely y se usa un ENTER_FRAME
"

una vez hayado el angulo como lo desplazo sin el Tween ? no acabo de verlo , por eso realizé el desplazamiento con el Tween no se me ocurrió como incrementar x e y poco a poco hasta llegar a ese punto .

podrías ponerme un ejemplo de la función con el desplazamiento ?

Ahora mismo voy con el selector de Frame luego te comento , y mil gracias.

Por erone

16 de clabLevel



 

msie8

 

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