Quiero: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:
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:
onClipEvent (enterFrame) {
_level0.Alexmovetoserve();
}
Objeto en frame 3:
onClipEvent (enterFrame) {
_level0.Alexelevandoball();
}
Lo malo es que la parte:
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.
}
...está presente 2 veces ¿alguna manera de mejorarlo que no sea crear una función y repetirla también?
Tenía esto:
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:
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.