Comunidad de diseño web y desarrollo en internet online

Salto personalizado en juego de plataformas as2

Citar            
MensajeEscrito el 26 Feb 2013 02:15 pm
Hola,chic@s. Estoy de vuelta con otro problema para mi juego. Éste es el segundo problema gordo que se me presenta, que, para ser novato tampoco está nada mal. Estoy haciendo un juego de plataformas y "tan sólo" me gustaría que el personaje saltara más cuanto más tiempo se presiona la tecla de salto (en este caso la barra de Espacio).
Por cierto, el personaje lo llamé bubMC.

Éste es el código que más o menos he podido elaborar googleando bastante:

Código ActionScript :

oyenteSalto.onKeyDown = function():Void
{
   if (bubMC.hitTest(fase_mc)) grounded = true
   function saltoPulsado() {
      /*si el jugador pulsa la barra de espacio mientras el personaje está pisando
        el suelo*/
   if(Key.getCode()==32&&grounded==true)botónSalto=false;
   }
   function saltoSoltado() {
      
   }
      //si el jugador suelta la barra de espacio
      if(Key.getCode()==32&&grounded==true)botónSalto=true;
   }
   onEnterFrame = function () {
      
    //mueve al personaje acorde a su velocidad
   if(!grounded)verticalSpeed += 2;//gravedad
    bubMC.y+=bubMC.verticalSpeed;
    //mientras el jugador pulsa la barra espaciadora, se incrementa su velocidad en y
    if (botónSalto) bubMC.verticalSpeed+=5;
    /*si hay mucha velocidad, se desactiva el botónSalto.  
   El jugador no puede empezar de nuevo hasta que el personaje no toque el suelo.*/
    if(bubMC.verticalSpeed>=20)botónSalto=false;

   
   
};
 
Key.addListener(oyenteSalto);

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Feb 2013 01:59 pm
Bueno, creo que he encontrado un algoritmo que funciona mucho mejor (lo que pasa es que está cogido directamente de otro juego, el juego se llama revive), está situado en un movieclip (eventt) dentro del personaje (mainchar):

Código ActionScript :

onClipEvent (load)
{
    Apressed = false;
    xspeed = 0;
    xspeedch = 1;
    xspeedM = 3;
    yspeed = 0;
    yspeedM = 4;
    yspeedMB = 3;
    yspeedslowfall = 1;
    yspeedch = 0;
    yjtime = 0;
    yjtimeL = 16;
    yspeedJ = 4;
    yspeedch = 1;
    jumping = 0;
    jimmy = false;
}
onClipEvent (enterFrame)
{
    if (_root.riseofdeath.srup.hart.hitTest(_parent.hitt))
    {
        xspeedM = 1;
        yspeedJ = 3;
        yspeedM = 2;
        yspeedMB = 1;
    }
    else
    {
        xspeedM = 3;
        yspeedJ = 4;
        yspeedM = 4;
        yspeedMB = 3;
    } // end else if
    if (_parent._currentframe < 20)
    {
        ++b;
        if (_parent._currentframe !== 4)
        {
            if (Key.isDown(37) && Key.isDown(39) || !Key.isDown(37) && !Key.isDown(39))
            {
                xspeed = 0;
            } // end if
            if (Key.isDown(37) && !Key.isDown(39))
            {
                if (xspeed > -xspeedM)
                {
                    xspeed = xspeed - xspeedch;
                } // end if
                _parent._xscale = -100;
            } // end if
            if (Key.isDown(39) && !Key.isDown(37))
            {
                if (xspeed < xspeedM)
                {
                    xspeed = xspeed + xspeedch;
                } // end if
                _parent._xscale = 100;
            } // end if
            _parent._x = _parent._x + xspeed;
            _parent._y = _parent._y + yspeed;
            if (xspeed == 0 && jumping == 0)
            {
                _parent.gotoAndStop(1);
            } // end if
            if ((xspeed < 0 || xspeed > 0) && jumping == 0)
            {
                _parent.gotoAndStop(2);
            } // end if
            if (!_parent._parent.ground.hitTest(_parent._x - 8 + 1, _parent._y + 0, true) && !_parent._parent.ground.hitTest(_parent._x + 8, _parent._y + 0, true) && jumping == 0)
            {
                jumping = 2;
            } // end if
            if (jumping == 2)
            {
                _parent.gotoAndStop(3);
                yspeed = yspeed + 1;
            } // end if
            if (yspeed > yspeedM)
            {
                yspeed = yspeedM;
            } // end if
            if (jumping == 1)
            {
                jimmy = false;
                _parent.gotoAndStop(3);
                ++yjtime;
                this._y = this._y - yspeed;
                if (yjtime > yjtimeL)
                {
                    yspeed = yspeed + yspeedch;
                } // end if
                if (!Key.isDown(65))
                {
                    yjtime = yjtimeL + 2;
                } // end if
                if (yspeed > -1)
                {
                    jumping = 2;
                } // end if
            } // end if
            if (Key.isDown(65) && Apressed == false && jumping == 0)
            {
                yspeed = -yspeedJ;
                _root.jump1sound.start();
                jumping = 1;
            } // end if
            while (_parent._parent.ground.hitTest(_parent._x + 8, _parent._y - 16, true) || _parent._parent.ground.hitTest(_parent._x + 8, _parent._y - 6, true))
            {
                xspeed = 0;
                --_parent._x;
            } // end while
            while (_parent._parent.ground.hitTest(_parent._x - 8 + 1, _parent._y - 16, true) || _parent._parent.ground.hitTest(_parent._x - 8 + 1, _parent._y - 6, true))
            {
                xspeed = 0;
                ++_parent._x;
            } // end while
            if (jumping == 2 && jimmy == false && Key.isDown(65) && Apressed == false)
            {
            } // end if
            for (jimmy = true; (_parent._parent.ground.hitTest(_parent._x + 8, _parent._y - 1, true) || _parent._parent.ground.hitTest(_parent._x - 8 + 1, _parent._y - 1, true)) && jumping !== 1; jimmy = false)
            {
                --_parent._y;
                yspeed = 0;
                yjtime = 0;
                jumping = 0;
                if (Key.isDown(65) && jimmy == true)
                {
                    yspeed = -yspeedJ;
                    _root.jump1sound.start();
                    jumping = 1;
                } // end if
                if (!Key.isDown(65))
                {
                } // end if
            } // end of for
            while (jumping == 1 && _parent._parent.ground.hitTest(_parent._x - 0, _parent._y - 24, true))
            {
                ++_parent._y;
                yspeed = 0;
                jumping = 2;
            } // end while
        } // end if
        if (_parent._currentframe == 4)
        {
            if (Key.isDown(37) && Key.isDown(39) || !Key.isDown(37) && !Key.isDown(39))
            {
                xspeed = 0;
            } // end if
            if (Key.isDown(37) && !Key.isDown(39))
            {
                if (xspeed > -xspeedM)
                {
                    xspeed = xspeed - xspeedch;
                } // end if
                _parent._xscale = -100;
            } // end if
            if (Key.isDown(39) && !Key.isDown(37))
            {
                if (xspeed < xspeedM)
                {
                    xspeed = xspeed + xspeedch;
                } // end if
                _parent._xscale = 100;
            } // end if
            _parent._x = _parent._x + xspeed;
            _parent._y = _parent._y + yspeed;
            if ((Key.isDown(38) || Key.isDown(65)) && !Key.isDown(40))
            {
                if (yspeed > -yspeedMB)
                {
                    yspeed = yspeed - yspeedch;
                } // end if
            } // end if
            if (!Key.isDown(38) && !Key.isDown(65) && Key.isDown(40))
            {
                if (yspeed < yspeedMB)
                {
                    yspeed = yspeed + yspeedch;
                } // end if
            } // end if
            if ((Key.isDown(38) || Key.isDown(65)) && Key.isDown(40) || !Key.isDown(38) && !Key.isDown(65) && !Key.isDown(40))
            {
                if (yspeed > yspeedslowfall)
                {
                    yspeed = yspeed - yspeedch;
                } // end if
                if (yspeed < yspeedslowfall)
                {
                    yspeed = yspeed + yspeedch;
                } // end if
            } // end if
            if (!Key.isDown(38) && !Key.isDown(65) && Key.isDown(40))
            {
                if (yspeed < yspeedMB)
                {
                    yspeed = yspeed + yspeedch;
                } // end if
            } // end if
            while (_parent._parent.ground.hitTest(_parent._x + 8, _parent._y - 16, true) || _parent._parent.ground.hitTest(_parent._x + 8, _parent._y - 6, true))
            {
                xspeed = 0;
                --_parent._x;
            } // end while
            while (_parent._parent.ground.hitTest(_parent._x - 8 + 1, _parent._y - 16, true) || _parent._parent.ground.hitTest(_parent._x - 8 + 1, _parent._y - 6, true))
            {
                xspeed = 0;
                ++_parent._x;
            } // end while
            while (_parent._parent.ground.hitTest(_parent._x - 0, _parent._y - 24, true) && yspeed < 1)
            {
                yspeed = 0;
                ++_parent._y;
            } // end while
            while ((_parent._parent.ground.hitTest(_parent._x + 8, _parent._y - 1, true) || _parent._parent.ground.hitTest(_parent._x - 8 + 1, _parent._y - 1, true)) && yspeed > -1)
            {
                yspeed = 0;
                --_parent._y;
            } // end while
        } // end if
    } // end if
    if (this._currentframe > 19)
    {
        yspeed = 0;
    } // end if
    if (_parent._currentframe < 20 && _parent._currentframe !== 4)
    {
        if (_parent._parent.crate1.hitTest(_parent._x + 0, _parent._y - 28, true) || _parent._parent.crate2.hitTest(_parent._x + 0, _parent._y - 28, true))
        {
            if (jumping == 0)
            {
                if (_root.followinglevail20 == false)
                {
                    jumping = 0;
                    yspeed = 0;
                    xspeed = 0;
                    _parent.gotoAndStop(4);
                    _root.heroasplode._x = _root.mainchar._x;
                    _root.heroasplode._y = _root.mainchar._y;
                    _root.heroasplode._xscale = _root.mainchar._xscale;
                    _root.heroasplode.gotoAndPlay(2);
                    _root.deathsound1mc.play();
                    _root.heroappear._x = _root.mainchar._x;
                    _root.heroappear._y = _root.mainchar._y;
                    _root.heroappear.gotoAndPlay(2);
                } // end if
                if (_root.followinglevail20 == true)
                {
                    jumping = 0;
                    yspeed = 0;
                    xspeed = 0;
                    _parent.gotoAndStop(21);
                    _root.heroasplode._x = _root.mainchar._x;
                    _root.heroasplode._y = _root.mainchar._y;
                    _root.heroasplode._xscale = _root.mainchar._xscale;
                    _root.heroasplode.gotoAndPlay(2);
                    if (_root.actuallevail20 == true)
                    {
                        stopAllSounds ();
                        _root.deathsound1mc.play();
                    } // end if
                    if (_root.actuallevail20 == false)
                    {
                        _root.deathsound1mc.play();
                    } // end if
                    _root.heroappear._x = _root.mainchar._x;
                    _root.heroappear._y = _root.mainchar._y;
                    _root.heroappear.gotoAndPlay(2);
                } // end if
            } // end if
        } // end if
        if (_parent._parent.crate1.hitTest(_parent._x + 0, _parent._y - 32, true) || _parent._parent.crate2.hitTest(_parent._x + 0, _parent._y - 32, true))
        {
            if (jumping == 1)
            {
                yspeed = 0;
                _parent._y = _parent._y + 8;
                jumping = 2;
            } // end if
        } // end if
    } // end if
    if (Key.isDown(65))
    {
        Apressed = true;
    }
    else
    {
        Apressed = false;
    } // end else if
}



y aquí está el ejemplo, pero no sé asignarle todo esto a mi personaje, ya que mi juego está creado con funciones para el movimiento del personaje en la raíz principal y luego a un mc vacío situado en los frames del personaje le asigno los onEnterFrame para las acciones y animaciones del personaje. Mi duda está en trasladar la parte del código que me interesa a mi juego...no sé si me he explicado con claridad...de todas formas, gracias por adelantado a quien intente ayudarme.

Aquí pongo un ejemplo del personaje de revive funcionando:

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Feb 2013 02:03 pm

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 01 Mar 2013 01:24 pm
Entonces, ¿alguien sabe cómo hacer el listener para que el salto de mi personaje sea más alto cuanto más tiempo tengo presionada la tecla de salto?

Por chachon2

41 de clabLevel



 

chrome
Citar            
MensajeEscrito el 09 Mar 2013 12:47 pm
Vale, muchas gracias por todas las respuestas. Al final lo he sacado yo solo. Aquí está el código para quien le pueda interesar:

Código ActionScript :

//cargando las variables del personaje.
onClipEvent (load)
{
    this._yscale = 100;
    var velY = 0;
    var acel = 0.046875;
    var gravedad = 0.218750;
    var enelAire = true;
    var saltoViejo = false;
    var saltoNuevo = false;
}
onClipEvent (enterFrame)
{
    setProperty("", _y, _y + velY);
  //condición para el salto.  
    saltoViejo = saltoNuevo;
    saltoNuevo = Key.isDown(32);
    if (enelAire == false && velY <= 0 && saltoViejo == false && saltoNuevo == true)
    {
        if (Key.isDown(32))
        {
            enelAire = true;
            velY = -6.500000;
        } // fin del if.
    } // fin del if.
    if (_root.suelo.hitTest(_x, _y, true))
    {
        _root.personaje1.enelAire = false;
        setProperty("", _y, _y - 1);
    } // fin del if.
    if (enelAire == true)
    {
        acel = 0.093750;
        velY = velY + gravedad;
        if (!Key.isDown(32) && velY < -4)
        {
            velY = -4;
        } // fin del if.
    } // fin del if.
    if (enelAire == false)
    {
        velY = 0;
        acel = 0.046875;
    } // fin del if.
    if (velY < 0 && velY > -4)
    {
        xspeed = xspeed - xspeed / 0.125000 / 256;
    } // fin del if.
    
}

Por chachon2

41 de clabLevel



 

chrome

 

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