Momento 1:
El usuario puede mover un personaje hacia los costados con las teclas flechas o elevar una pelota con la tecla A. El 2ndo evento activa el momento 2.
Momento 2:
La pelota sube cada vez más lento y luego comienza a bajar cada vez más rápido, hasta llegar a su posición de inicio, evento que reactiva el momento 1. Si la tecla A se soltó y mientras la pelota está en el aire se represiona, se activa el momento 3.
Momento 1 repetido:
Si el usuario no soltó la tecla A, el evento de elevar la pelota no se activa, pero es posible mover al personaje.
Tengo:
Frame 1:
Código
Teclafuesoltada = 0; // /////////////////////////////////////////////////////// // /////////////////////// Alex //////////////////////// // /////////////////////////////////////////////////////// function Alexmovetoserve () { if (Teclafuesoltada == 0) { // Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada. // Hasta que se capte que la tecla no está presionada no se podrá elevar la pelota. // Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano. if (Key.isDown(65)) { } else { Teclafuesoltada = 1; // Ahora al presionar la tecla de nuevo Alex elevará la pelota. } if (Key.isDown(37)) { // Se mueve a la izquierda, si no se sale del límite. } else if (Key.isDown(39)) { // Se mueve a la derecha, si no se sale del límite. } } else if (Key.isDown(65)) { // Tecla A, lanza pelota hacia arriba. Funcencurso = "Alexelevandoball"; Teclafuesoltada = 0; // Velocidad de subida y altura (todo al revés). BallZSpeed = -0.75; BallZ = -40; Alex.gotoAndStop(2); gotoAndStop(3); } else if (Key.isDown(37)) { // Se mueve a la izquierda, si no se sale del límite. } else if (Key.isDown(39)) { // Se mueve a la derecha, si no se sale del límite. } } // function Alexelevandoball () { if (Teclafuesoltada == 0) { // Aún no se soltó la tecla. if (Key.isDown(65)) { } else { Teclafuesoltada = 1; // Ahora al presionarla de nuevo Alex saca. } } else if (Key.isDown(65)) { // La tecla fue soltada y vuelta a presionar; Alex saca. Alex.gotoAndStop(3); gotoAndStop(3); } // Disminuye la velocidad de subida y varía la altura. // Varía el tamaño de la pelota. if (BallZ>=-40) { // Si queda muy abajo (BallZ muy alto), vuelve a la etapa Alexmovetoserve. Teclafuesoltada = 0; Funcencurso = "Alexmovetoserve"; Alex.gotoAndStop(1); gotoAndStop(2); } } Funcencurso = "Alexmovetoserve";
Frame 2:
stop ();
Objeto en frame 2:
Código:
onClipEvent (enterFrame) {
_level0.Alexmovetoserve();
}
Objeto en frame 3:
Código:
onClipEvent (enterFrame) {
_level0.Alexelevandoball();
}
Lo malo es que la parte:
Código:
if (Key.isDown(37)) {
// Se mueve a la izquierda, si no se sale del límite.
} else if (Key.isDown(39)) {
// Se mueve a la derecha, si no se sale del límite.
}
Tenía esto:
Código
Teclafuesoltada = 0; // /////////////////////////////////////////////////////// // /////////////////////// Alex //////////////////////// // /////////////////////////////////////////////////////// function Alexmovetoserve () { if (Teclafuesoltada == 0) { // Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada. // Hasta que se capte que la tecla no está presionada no se podrá elevar la pelota. // Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano. if (Key.isDown(65)) { } else { Teclafuesoltada = 1; // Ahora al presionar la tecla de nuevo Alex elevará la pelota. } } else if (Key.isDown(65)) { // Tecla A, lanza pelota hacia arriba. Funcencurso = "Alexelevandoball"; Teclafuesoltada = 0; // Velocidad de subida y altura (todo al revés). BallZSpeed = -0.75; BallZ = -40; Alex.gotoAndStop(2); gotoAndStop(3); } else if (Key.isDown(37)) { // Se mueve a la izquierda, si no se sale del límite. } else if (Key.isDown(39)) { // Se mueve a la derecha, si no se sale del límite. } } // function Alexelevandoball () { if (Teclafuesoltada == 0) { // Aún no se soltó la tecla. if (Key.isDown(65)) { } else { Teclafuesoltada = 1; // Ahora al presionarla de nuevo Alex saca. } } else if (Key.isDown(65)) { // La tecla fue soltada y vuelta a presionar; Alex saca. Alex.gotoAndStop(3); gotoAndStop(3); } // Disminuye la velocidad de subida y varía la altura. // Varía el tamaño de la pelota. if (BallZ>=-40) { // Si queda muy abajo (BallZ muy alto), vuelve a la etapa Alexmovetoserve. Teclafuesoltada = 0; Funcencurso = "Alexmovetoserve"; Alex.gotoAndStop(1); gotoAndStop(2); } } Funcencurso = "Alexmovetoserve";
...pero con eso ocurre que si uno deja presionada la tecla desde el evento 1, entonces al reactivarse ese momento no es posible moverse hasta que se suelte la tecla; quiero que se pueda.
Para lograrlo hice esto:
Código
Teclafuesoltada = 0; // /////////////////////////////////////////////////////// // /////////////////////// Alex //////////////////////// // /////////////////////////////////////////////////////// function Alexmovetoserve () { // Se asume que el jugador elevó la pelota y no soltó la tecla, o que quizá empezó el juego con la tecla presionada. // Hasta que se capte que la tecla no está presionada no se podrá elevar la pelota. // Es para evitar que en caso de mantener la tecla presionada se eleve la pelota a penas vuelva a la mano. if (Key.isDown(37)) { // Se mueve a la izquierda, si no se sale del límite. } else if (Key.isDown(39)) { // Se mueve a la derecha, si no se sale del límite. } else if (Teclafuesoltada == 0) { if (Key.isDown(65)) { } else { Teclafuesoltada = 1; // Ahora al presionar la tecla de nuevo Alex elevará la pelota. } } else if (Key.isDown(65)) { // Tecla A, lanza pelota hacia arriba. Funcencurso = "Alexelevandoball"; Teclafuesoltada = 0; // Velocidad de subida y altura (todo al revés). BallZSpeed = -0.75; BallZ = -40; Alex.gotoAndStop(2); gotoAndStop(3); } } // function Alexelevandoball () { if (Teclafuesoltada == 0) { // Aún no se soltó la tecla. if (Key.isDown(65)) { } else { Teclafuesoltada = 1; // Ahora al presionarla de nuevo Alex saca. } } else if (Key.isDown(65)) { // La tecla fue soltada y vuelta a presionar; Alex saca. Alex.gotoAndStop(3); gotoAndStop(3); } // Disminuye la velocidad de subida y varía la altura. BallZSpeed = BallZSpeed+0.01; BallZ = BallZ+BallZSpeed; setProperty (Alex.Ball, _y, BallZ); // Varía el tamaño de la pelota. BallZoom = 100+BallZ*-1; setProperty (Alex.Ball, _xscale, BallZoom); setProperty (Alex.Ball, _yscale, BallZoom); if (BallZ>=-40) { // Si queda muy abajo (BallZ muy alto), vuelve a la etapa Alexmovetoserve. Teclafuesoltada = 0; Funcencurso = "Alexmovetoserve"; Alex.gotoAndStop(1); gotoAndStop(2); } } Funcencurso = "Alexmovetoserve";
...pero esto hace que mientras uno esté caminando, si se presiona A, el evento de A no se activa.
¡Ya se me ocurrió una solución y funcionó! Describir los problemas ayuda. Bueno, lo dejo como reto, si quieren les digo la solución.