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);
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: