Otra situación:
- Presión.
- Frame.
- Frame, aumenta el contador, presión de otra tecla.
- Frame, aumenta 1 el contador.
- Frame, aumenta 2 el contador.
Es decir, el contador aumenta 1 en cada frame por cada tecla presionándose pero sólo si se presionó durante más de 1 frame. No estoy pudiendo lograr eso.
Mi código es básicamente repetir esto:
Código:
Cuando hay una presión:
TeclasPresionandose++
Si AlgunaPresionandose == "No", then eso = "Recién"
Cuando hay un nuevo frame:
Si AlgunaPresionandose == "Recién", then eso = "Sí"
// Eso logra que en el 1er frame no aumente el contador.
sino si AlgunaPresionandose == "Sí", then:
Contador = Contador+TeclasPresionandose
Eso no sirve porque la 2nda, 3era, etc, tecla que se presione aumentará el contador desde el 1er frame en que se presione, y debe ser desde el 2ndo.
Intenté hacer esto:
Código:
Cuando hay una presión:
TeclasPresionandose++
TeclasRecientes++
Si AlgunaPresionandose == "No", then eso = "Recién"
Cuando hay un nuevo frame:
Si AlgunaPresionandose == "Recién", then eso = "Sí"
sino si AlgunaPresionandose == "Sí", then:
Contador = Contador+TeclasPresionandose-TeclasRecientes
TeclasRecientes = 0
Pero sucede esto:
En el 1er frame no aumenta, eso está bien.
En el 2ndo frame tampoco, porque TeclasPresionandose-TeclasRecientes es 1-1, está mal que no aumente.
Lo que se me acaba de ocurrir es:
Código:
Cuando hay una presión:
TeclasPresionandose++
TeclasRecientes++
Si AlgunaPresionandose == "No", then eso = "Recién"
Cuando hay un nuevo frame:
Si AlgunaPresionandose == "Recién", then:
Eso = "Sí"
TeclasRecientes--
sino si AlgunaPresionandose == "Sí", then:
Contador = Contador+TeclasPresionandose-TeclasRecientes
TeclasRecientes = 0
Lo pruebo, pero es feo ese -- sin que realmente se haya reducido. ¿Soluciones?
EDIT: Hay que poner 0 en vez de -- o sino si la 1era vez se presiona más de una tecla, lo que se sume será 2-1 la 1era vez, y debe ser 2. En realidad todo eso de "No", "Recién" y "Sí" podría ser innecesario, lo que pasa que también cuento la cantidad de frames (a partir del 2ndo) en que se está presionando alguna tecla, en este caso independientemente de cuántas se presionen, pero no pensé que fuese relevante. Dejo el código completo a ver si alguien lo puede simplificar:
Nota: Lo de C (ejemplo MovimientosC) es que se cuenta el evento si es el único en ese momento o si sucede a la vez que otros, resume +Cualquiercosa.
Código
// Frame 1: Frames = 0; // Relativo a Movimiento del mouse: // Esto sólo lo pude contar en el cambio de frame: MovimientosC = 0; // Esto se cuenta desde el 2ndo frame en que se mueve: FramesMoviendoseC = 0; // Esto sólo lo pude contar en el cambio de frame: FrenadasC = 0; // Relativo a Clics: ClicsC = 0; // Esto se cuenta desde el 2ndo frame en que se está cliqueando: FramesCliqueandoC = 0; DesclicsC = 0; // Relativo a Clacs: ClacsC = 0; // Esto se cuenta desde el 2ndo frame en que se está claqueando: FramesClaqueando1C = 0; // La diferencia es que cuenta cada tecla claqueandose: FramesClaqueandoXC = 0; DesclacsC = 0; // Se detiene en el frame 4 (en el 2 y 3 hay un tiempo de espera antes de empezar, no viene al caso). Un objeto en él tiene: onClipEvent (load) { // Para saber si el mouse se movió: ActualXMouse = _level0._xmouse; ActualYMouse = _level0._ymouse; // Para saber si FramesMoviendoseC debe aumentar: Moviendose = "No"; // Para saber si FramesClaqueando1C debe aumentar: Claqueando = "No"; // Para determinar qué pantalla mostrar: PantallaActual = 1; TiempodePantalla = 333; } // Clics: onClipEvent (mouseDown) { _level0.ClicsC++; // Para saber si FramesCliqueandoC debe aumentar // (si al cambiar el frame es Recién, cambia a Sí y empieza... // a aumentar. Se detiene cuando cambia a No, al descliquear). Cliqueando = "Recién"; } onClipEvent (mouseUp) { _level0.DesclicsC++; // Para que FramesCliqueandoC ya no aumente: Cliqueando = "No"; } // Teclas: onClipEvent (keyDown) { // Clacs sólo debe aumentar si ocurre un clac, no si se mantiene: // Si la tecla presionándose no está indicada como tal: if (eval("Tecla"+Key.getCode()+"Presionandose") == undefined) { // Indicarla: // trace("Se presionó la tecla: "+Key.getCode()); set ("Tecla"+Key.getCode()+"Presionandose", "S"); // trace("Tecla"+Key.getCode()+"Presionandose: "+eval("Tecla"+Key.getCode()+"Presionandose")); _level0.ClacsC++; // Para más adelante saber qué tecla se soltó: TeclasPresionandose++; // Para más adelante saber cuánto debe aumentar FramesClaqueandoXC: TeclasRecienPresionadas++; // Esto es para saber cual eliminar cuando se deje de presionarse: set ("TeclaPresionandoseNro"+TeclasPresionandose, Key.getCode()); // trace("TeclaPresionandoseNro"+TeclasPresionandose+": "+eval("TeclaPresionandoseNro"+TeclasPresionandose)); if (Claqueando == "No") { Claqueando = "Recién"; } } } onClipEvent (keyUp) { // Revisar lista de teclas guardadas como presionándose, // para quitar las que ya no estén así: Puntero = 0; do { Puntero = Puntero+1; if (Key.isDown(eval("TeclaPresionandoseNro"+Puntero))) { // trace("La tecla "+eval("TeclaPresionandoseNro"+Puntero)+" aún está presionada."); } else { // La tecla guardada como presionándose nro (puntero), // ya no está presionándose: Quitar la asignación: // ¿Debo indicar que sólo si existe? // trace("La tecla "+eval("TeclaPresionandoseNro"+Puntero)+" no está presionada."); // trace("Se elimina."); delete eval("Tecla"+eval("TeclaPresionandoseNro"+Puntero)+"Presionandose"); // _level0.DesclacsC++; // Eliminar tecla de la lista de presionándose: delete eval("TeclaPresionandoseNro"+Puntero); // Reordenar lista si es necesario: Puntero2 = Puntero; while (Puntero2<TeclasPresionandose) { set("TeclaPresionandoseNro"+Puntero2, eval("TeclaPresionandoseNro"+(Puntero2+1))); Puntero2 = Puntero2+1; } // Borrar la última tecla de la lista (fue movida a antes): delete eval("TeclaPresionandoseNro"+Puntero2); TeclasPresionandose--; // TeclasSoltadasEnEsteFrame++; } } while (Puntero<TeclasPresionandose); if (TeclasPresionandose == 0) { Claqueando = "No"; } Desclaqueando = "Sí"; } onClipEvent (enterFrame) { // Relativo a Frames: _level0.Frames = _level0.Frames+1; // Relativo al Movimiento del Mouse: // Si se movió: if (ActualXMouse != _level0._xmouse or ActualYMouse != _level0._ymouse) { // Si estaba quieto: if (Moviendose == "No") { _level0.MovimientosC++; Moviendose = "Sí"; } else { _level0.FramesMoviendoseC++; } } else if (Moviendose == "Sí") { // No se movió pero estaba moviéndose: Moviendose = "No"; _level0.FrenadasC++; } ActualXMouse = _level0._xmouse; ActualYMouse = _level0._ymouse; // Relativo a Clics: if (Cliqueando == "Sí") { _level0.FramesCliqueandoC++; } else if (Cliqueando == "Recién") { Cliqueando = "Sí"; } // Relativo a Clacs: if (Claqueando == "Sí") { _level0.FramesClaqueando1C++; _level0.FramesClaqueandoXC = _level0.FramesClaqueandoXC+TeclasPresionandose-TeclasRecienPresionadas; trace("TeclasPresionandose: "+TeclasPresionandose); trace("TeclasRecienPresionadas: "+TeclasRecienPresionadas); TeclasRecienPresionadas = 0; } else if (Claqueando == "Recién") { Claqueando = "Sí"; // Esto es un parche para que a partir del 2ndo frame, // la 1er o 1eras teclas se cuenten: TeclasRecienPresionadas = 0; } // Relativo a cambiar pantalla: TiempodePantalla--; if (TiempodePantalla == 0) { TiempodePantalla = 333; if (PantallaActual == 1) { PantallaActual = 2; } else { PantallaActual = 1; } _level0.gotoAndStop(PantallaActual+3); } }
Lo del cambio de pantalla no es relevante aquí.