Comunidad de diseño web y desarrollo en internet online

¿Como hago un Personaje con Doble Salto? {AS2}

Citar            
MensajeEscrito el 23 Mar 2011 02:29 am
Buenas Gente de CL!
Aqui yo de nuevo queriendo terminar mi flashgame! XD
Ya habia elaborado un codigo que me "funcionaba" pero descubri que tenia una fuga de memoria y integrantes del foro me recomendaron reestructurar el codigo...asi que empeze otra vez..(Paciencia y Dedicación Hermanos)

Se me ocurrio ya que debo hacerlo de nuevo integrarle una nueva funcion al personaje, UN SALTO DOBLE! suena sencillo pero...XD

Primero le mostrare el codigo que utilize al principio:

Código ActionScript :

var velLateral:Number = 3;
var friccion:Number = .6;
var friccionAire:Number = .6;
var gravedad:Number = -4.5;
var tiempoSalto:Number = 4;
var salto:Number = 30/tiempoSalto;
var velMaxima:Number = 20;
var puntoIzq:Number = -10;
var puntoDer:Number = 10;
var puntoBajo:Number = 17.5;
var puntoArriba:Number = -17.5;
//Inicializar Personaje//
function inicializarPersonaje(mc:MovieClip):Void{
   if(mc.dx==undefined){
      mc.dx = 0;
      mc.dy = 0;
      mc.saltando = true;
      mc.empezoSalto=0;
   }
   mc.friccion = friccion;
   mc.vel = velLateral;
   mc.salto = salto;
}
function manejarPersonaje():Void{
   if(Key.isDown(Key.UP)&&personaje_mc.saltando==false&&_root.atacando==false){
      salta(personaje_mc);
      personaje_mc.gotoAndStop("saltando");
   }else if(Key.isDown(Key.UP)&&personaje_mc.empezoSalto>0){
      personaje_mc.dy-=personaje_mc.salto;
   }
   personaje_mc.empezoSalto--;
}
function salta(mc:MovieClip):Void{
   inicializarPersonaje(mc);
   mc.friccion = friccionAire;
   mc.dy -= mc.salto;
   mc.saltando = true;
   mc.empezoSalto=tiempoSalto;
}
function aplicarMovimiento():Void{
   this._x+=this.dx;
   this.dx*=this.friccion;
   if(this.dx>velMaxima){
      this.dx=velMaxima;
   }else if(this.dx<-velMaxima){
      this.dx=-velMaxima;
   }
   this._y+=this.dy;
   if(!piso.hitTest(this._x,this._y+puntoBajo+1,true)){
      this.saltando = true;
   }
   if(this.saltando){
      this.suelo = 0;
      this.dy-=gravedad;
      if(this.dy>salto*tiempoSalto){
         this.dy = salto*t


Orale! un poco engorroso no y admito que use un tuto de la internet y aunque me esforce en entender al final no lo logre pero si me funciono... entonce me propuse entender como diantres funcionaba...leyendo por aqui y por alla saque las siguientes conclusiones...

¿Que es un Salto?
El saltar en flahs es una variacion de la posicion _y de un clip, esta debe aumentar de forma continua y luego bajar. Entonces se deberia determinar hasta que numero va a aumentar (Esto seria que tan alto saltaria) y que a partir de alli baje...suena sencillo XD

Ok, quize elaborar un codigo que me funcione y que sea mas sencillo... me puse a trabajar en esto:

Primero tengo en el escenario un clip que llamare "piso" //sobre el el personaje saltara//

Luego otro clip que sera el personaje llamado "personaje_mc"

ok entonces invente este

Código ActionScript :

var velocidad:Number = 10
var gravedad:Number = 5
var saltomax:Number = 20
var saltando:Boolean = false

function saltar(){
   if(_root.piso.hitTest(this._x, this._y+20, true)){
      saltomax=20
   }
   if(!_root.piso.hitTest(this._x, this._y+20, true)&&!saltando){
      this._y+=gravedad
   }
   if(Key.isDown(Key.RIGHT)&&!_root.piso.hitTest(this._x+20, this._y, true)){
      this._x+=velocidad
   }
   if(Key.isDown(Key.LEFT)&&!_root.piso.hitTest(this._x-20, this._y, true)){
      this._x-=velocidad
   }
   if(Key.isDown(Key.UP)&&!saltando){
      empezosalto();
   }
}   
function empezosalto(){
   if ( saltomax >= 0){
      personaje_mc._y-=saltomax
      saltomax-=gravedad
   }
}
personaje_mc.onEnterFrame=saltar


Voy a explicar para que es y ver si me corrigen o me podrian ayudar para que sea mas PRO jejejeej

Primero determine la variable "velocidad" que es para el movimiento lateral
despues "gravedad" que es para que el personaje baje
despues "saltomax" que es hasta donde puede subir
y finalmente el Boolean "saltando" para saber cuando lo esta haciendo

Código ActionScript :

var velocidad:Number = 10
var gravedad:Number = 5
var saltomax:Number = 20
var saltando:Boolean = false


Luego cree la funcion saltar que tiene varios condicionales

Código ActionScript :

   if(_root.piso.hitTest(this._x, this._y+20, true)){
      saltomax=20
   }


eso es para que cuando toque piso coloque de nuevo la variable en 20

Código ActionScript :

   if(!_root.piso.hitTest(this._x, this._y+20, true)&&!saltando){
      this._y+=gravedad
   }


eso para que cuando no toque piso el personaje baje ps hasta que toque

Código ActionScript :

   if(Key.isDown(Key.RIGHT)&&!_root.piso.hitTest(this._x+20, this._y, true)){
      this._x+=velocidad
   }
   if(Key.isDown(Key.LEFT)&&!_root.piso.hitTest(this._x-20, this._y, true)){
      this._x-=velocidad
   }


esto para dezplazar a la derecha e izquierda

Código ActionScript :

   if(Key.isDown(Key.UP)&&!saltando){
      empezosalto();
   }


y esto hace un llamado a la funcion empezo salto

Código ActionScript :

function empezosalto(){
   if ( saltomax >= 0){
      personaje_mc._y-=saltomax
      saltomax-=gravedad
   }
}
personaje_mc.onEnterFrame=saltar


Aqui me dice que si saltomax es mayor a 0 que la propiedad _y le reste "saltomax" y al mismo tiempo a "saltomax" se le reste gravedad... eso hace que suba y el condicional de mas arriba que baje...

AHORA SI LA AYUDA QUE QUIERO ES QUE ME PODRIAN CORREGIR Y ME AYUDEN A INVENTAR UN DOLE SALTO XD....

Desde ya gracias a quien se apiade de mi...
Saludos

Por Anigrama

44 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Mar 2011 07:56 am
Hola,
puedes crear otra variable Boolean que exprese ese salto doble, de modo que la primera vez que pulses la tecla de salto, "saltando" se vuelve true. La segunda vez que lo pulses, si saltando es true entonces dobleSalto es true. Y donde pones:
if(Key.isDown(Key.UP)&&!saltando){
cambia saltando por la variable dobleSalto.
Por cierto, la variable saltomax es el impulso del salto, no hasta donde va a subir (eso dependerá de la fuerza del impulso y de la gravedad)

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 23 Mar 2011 04:25 pm
Gracias hermano por la respuesta!

Lo intento y aviso que tal me queda! XD

Por Anigrama

44 de clabLevel



Genero:Masculino  

firefox

 

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