Bien, a riesgo de volverme monotemático, voy a postear un tip más para ayudar en la creación de videoJuegos.
En este caso, es la hora de los trucos o cheatcodes (no puse trucos en el título para que no se malinterpretara).
Hay 2 maneras de hacerlos, la simple y la complicada. La primera sería similar a la consola del Half Life, donde con un if se puede verificar si el texto ingresado es o no un cheatcode. Veamos un ejemplo donde tenemos un cuadrito de texto llamado consola en el que el usuario ingresa un truco. Sabiendo que si no es un truco, es un mensaje para otros jugadores.
Código : var truco:String = "noClip"; // onEnterFrame = function () { if (Key.isDown (Key.ENTER)) { // if (consola.text == truco) { // // Si el código es correcto se activa la opción de atravesar paredes atravesarParedes = true; } else { // // Si no lo es, se entiende que era un mensaje de chat trace (consola.text); consola.text = ""; } } };
Bien, eso era más o menos simple, pero no es el único tipo de truco posible. Existe otro, el del estilo GTA, donde se presionan durante el juego una serie de letras (como "aspirine") y si estas coinciden con un truco, éste se activa. La ventaja de esto es que el usuario no se ve obligado a escribir en un cuadrito de texto.
Algo similar ocurre con los juegos de pelea cuando se introducen series de movimientos ("abajo, abajo, abajo, arriba, patada, golpe, etc") que activan una acción especial. Algo así como las fatalities del MK.
ADVERTENCIA: a partir de ahora comienzo a trabajar con arrays, en la ayuda de Flash se halla toda la información concerniente a sus métodos y propiedades que voy a usar y que, no voy a explicar por encontrarse todas las explicaciones en la ayuda.
Continuando, hay que definir los trucos con los que se quiere trabajar (los defino como string y luego como arrays):
Código : var string1:String = "hernan"; var string2:String = "rivas"; var string3:String = "acosta"; // var cheatCode1:Array = string1.split (""); var cheatCode2:Array = string2.split (""); var cheatCode3:Array = string3.split ("");
En caso de que se pregunten porqué los hice strings, para transformarlos en arrays, les digo: Es mucho más simple hacerlo de este modo. Ya que se hace mucho más simple modificar los trucos y poner nuevos. Escribiendo uno a uno los elementos del Array, se pierde tiempo y se hace más difícil modificarlos en el futuro.
Bien, ahora creamos un nuevo Array que va a almacenar todas las letras presionadas a lo largo del juego y otro, llamado arrayConfirmacion, que demostrará su utilidad más tarde:
Código : var teclasPresionadas:Array = new Array (); var arrayConfirmacion:Array = new Array ()
Ahora, el código que almacena estas teclas:
Código : var listenerTeclado:Object = new Object (); // listenerTeclado.onKeyDown = function () { teclasPresionadas.push (String.fromCharCode (Key.getAscii ())); // }; // Key.addListener (listenerTeclado);
Como verán, no es nada demasiado complicado, simplemente un listener. Pero hay una línea que puede confundir un poco.
"String.fromCharCode ()" Crea un string o cadena a partir del codigo ascii de una letra.
"Key.getAscii ()" Nos devuelve el código ascii de la tecla presionada.
Ahora que eso quedó aclarado, contiuemos. El array teclasPresioandas va a almacenar demasiados caracteres luego de un rato de juego. Eso no nos sirve, solo necesitamos las últimas teclas. La cantidad de las mismas va a ser igual al largo de nuestro truco más extenso. No usamos Math.max porque solo admite 2 valores.
Código : var numeroTrucos:Number = 3; var largoMaximo:Number = 0; // for (i = 1; i <= numeroTrucos; i++) { // if (this["cheatCode" + i].length > largoMaximo) { largoMaximo = this["cheatCode" + i].length; } }
Bien, eso fue simple, ahora lo importante, mantengamos el tamaño de teclasPresionadas bajo control. Este código se ubica debajo del teclasPresionadas.push:
Código : if (teclasPresionadas.length > largoMaximo) { teclasPresionadas = teclasPresionadas.slice (-largoMaximo); }
Como verán, es un uso creativo del slice.
Ahora, lo último, corroborar si se escribió un código válido. Esto se hace con este código, ubicado debajo del anterior (dentro del listener). Este es el momento de usar el arrayConfirmación:
Código : for (i = 1; i <= numeroTrucos; i++) { arrayConfirmacion = teclasPresionadas.slice (-_root["cheatCode" + i].length); if (arrayConfirmacion.toString () == _root["cheatCode" + i].toString ()) { trace ("Activado código numero " + i); } }
Nótese el cambio de this["cheatCode" + i] en el primer for a _root["cheatCode" + i]
Esto se debe a que this se refiere a la tecla presionada y no al root.
También, veáse que usé un toString () Esto es porque 2 arrays no son iguales a menos que uno sea una copia del otro (algo bastante estúpido, por cierto), la ayuda de Flash tiene más información sobre el tema. Vayan a ayuda y busquen el operador ==.
Bien, supongo que alguien le encontrará alguna utilidad a esto aparte de la aplicación en videojuegos y en programas donde queramos esconder huevos de pascua. Como es lógico, podemos poner cuantos códigos queramos mientras se modifique la variable numeroTrucos en consecuencia. |