
Maníbulas, pájaros, chispas...
Donkey Kong también otras cosas.
Otros personajes que ponga más adelante también, e incluso las cosas mismas (algunos pájaros de Mario dejan caer huevos, por ejemplo).
Algunas diferentes tipos de cosas se moverían igual, pero otras no.
El daño que hacen al colisionar con algo depende de qué cosa sea ella, y el algo. Aún no tengo seguro esto pero es básicamente poder de colisión y de defensa.
¿Cómo harían todo eso uds?
Quiero evitar líos.
Por ahora lo que se me ocurre es:
- Crear una lista de Profundidades disponibles. En Flash cada cosa visible que se agrega debe tener cierta profundidad, un número, y si se pone que una tenga la misma que otra, la 1era desaparece. No sé si 1000 será muy pesado. Significaría que puede haber hasta 1000 cosas agregadas.
- Crear una lista de Extras, que serían las cosas agregadas.
- Cuando se agrega algo, se toma el 1er número disponible de Profundidades, y la cosa se agrega en la lista de Extras. Su nombre sería por ejemplo "Spark"+Numero (obtenido de Profundidad). Eso significa que podría haber Spark1 y Spark3, sin haber existido 2, si en medio se agregó otra cosa. Pero bueno, el número es su profundidad y para distinguir, no es un conteo de los tipos de cosas agregadas.
- Cuando un extra desaparece, se agrega su número en Profundidades y su nombre se quita de Extras.
Y lo más complicado, un while que recorrería la lista de Extras llamando a sus correspondientes códigos y viendo si colisionan con otra cosa.
Para llamar a distintos códigos según qué extra sea, tendría que quitarle el número a su nombre, porque no puede existir una función Spark1Code, Spark2Code, etc, todos iguales, debe ser SparkCode, BirdCode, etc. Entonces en vez de una lista de extras podrían ser 2:
- Una tiene los nombres con número para saber exacto qué cosa es, cuando se requiera moverla, etc.
- La otra tiene sólo el nombre del tipo de cosa que es, así se sabe a qué código llamar.
Otra posibilidad sería que exista un objeto Pájaros, por ejemplo, donde se pongan ellos, y entonces no habría saltos en la numeración (aunque no es problema) y todos usarían el mismo código.
No habría necesidad de funciones variables, pero habría muchos objetos generalmente en vano viendo si tienen algo en ellos... Creo que es mejor lo anterior.
Otra sería que en vez de una lista de Extras haya una de pájaros, etc, pero de nuevo serían muchos whiles, uno para cada lista, que generalmente estaría vacía, so...
Los códigos de las cosas agregadas, en vez de estar en la zona root pueden estar en ellos mismos, pero eso hace que se ejecuten luego de lo que esté en root, creo, así que tampoco parece buena idea.
¿Estará bien?
Ya tengo a Mario pudiendo caminar y dar latigazos, todo dependiente de la velocidad o fuerza que le ponga. Cuando tiene 1 MP convoca a una mandíbula. Me falta que se mueva.
Donkey Kong camina hacia Mario golpeando su pecho a una velocidad dependiente de la que camina. No lo muestro porque me paspa grabar el video.
Código
// Las imágenes fueron tomadas con Virtualnes, zoom 2, // copiadas desde Chrome. // General: fscommand ("fullscreen", "true"); // Se refiere a convocados: ListaDeExtras = []; // Player: attachMovie("sMarioDK", "Player", 1001); setProperty ("Player", _x, 20); setProperty ("Player", _y, 568); // Determinan a qué función se llama: Player.Action = "Quiet"; Player.Action2 = "Quiet"; Player.Facing = 1; MarioDKHP = 1; MarioDKMPMax = 1; MarioDKMP = 1; MarioDKMPRecovery = 0.003; MarioDKPower = 2; MarioDKSpeed = 0.5; // La animación avanza cuando esto llega a 100: MarioDKTurn = 0; // La velocidad de la animación puede depender de la velocidad... // de caminar, o de la fuerza, etc: MarioDKTic = MarioDKSpeed*1.5; // Para que al empezar a caminar o a quedarse quieto, // el martillo quede como estaba, arriba o abajo, // en el mismo nro de frame: Player.EtapaDeMartillo = 1; Player.ResetearEtapaDeMartillo = "No"; // IA: attachMovie("sDK", "IA", 1000); setProperty ("IA", _x, 780); setProperty ("IA", _y, 568); IA.Action2 = "Quiet"; IA.Facing = -1; DKSpeed = 0.4; IATurn = 0; // Escenario: attachMovie("sDKSuelo", "Suelo", 0); setProperty ("Suelo", _x, 0); setProperty ("Suelo", _y, 568); // ///////////////////////////////////////////// // ////////////////// Most /////////////////// // ///////////////////////////////////////////// function FaceRight (Character) { if (eval(Character+".Facing") == -1) { set (Character+".Facing", 1); eval(Character)._xscale = 100; } } function FaceLeft (Character) { if (eval(Character+".Facing") == 1) { set (Character+".Facing", -1); eval(Character)._xscale = -100; } } // ///////////////////////////////////////////// // ////////////////// Mario ////////////////// // ///////////////////////////////////////////// // Power up: Las criaturas que convoca se mueven mejor. function ControlMario () { if (Key.isDown(83)) { // Si se presiona S. eval("SWhen"+Player.Action+Player.Action2)(); } else if (Key.isDown(32)) { // Espacio: eval("SpaceWhen"+Player.Action+Player.Action2)(); } else if (Key.isDown(39)) { // Derecha: eval("RightWhen"+Player.Action+Player.Action2)(); } else if (Key.isDown(37)) { // Izquierda: eval("LeftWhen"+Player.Action+Player.Action2)(); } else { // Nada: eval("QuietWhen"+Player.Action+Player.Action2)(); } MarioDKTurn = MarioDKTurn + MarioDKTic; if (MarioDKTurn >= 10) { MarioDKTurn = 0; Player.EtapaDeMartillo++; if (Player.EtapaDeMartillo == 7) { Player.EtapaDeMartillo = 1; } Player.Movie.play(); } if (MarioDKMP < MarioDKMPMax) { MarioDKMP = MarioDKMP+MarioDKMPRecovery; } } // When QuietQuiet: function SWhenQuietQuiet () { Whip(); } function RightWhenQuietQuiet () { StartToWalk(); WalkToRight(); } function LeftWhenQuietQuiet () { StartToWalk(); WalkToLeft(); } // When QuietWalking: function SWhenQuietWalking () { Player.Action2 = "Quiet"; Whip(); } function RightWhenQuietWalking () { WalkToRight(); } function LeftWhenQuietWalking () { WalkToLeft(); } function QuietWhenQuietWalking () { Player.Action2 = "Quiet"; Quiet(); } // To whens: function Whip () { Player.Action = "Whiping"; MarioDKTic = MarioDKPower/2; Player.gotoAndStop(3); if (MarioDKMP >= 1) { MarioDKMP--; Extras++; Name = "Extra"+Extras; attachMovie("sDKSnapjaw", Name, Extras); setProperty (Name, _x, Player._x+1); setProperty (Name, _y, 568); } } function StartToWalk () { Player.Action2 = "Walking"; MarioDKTic = MarioDKSpeed*1.5; Player.gotoAndStop(2); } function WalkToRight () { Player._x = Player._x+MarioDKSpeed; FaceRight("Player"); } function WalkToLeft () { Player._x = Player._x-MarioDKSpeed; FaceLeft("Player"); } function Quiet () { Player.Action2 = "Quiet"; Player.gotoAndStop(1); } // ///////////////////////////////////////////// // ////////////////// DK IA ////////////////// // ///////////////////////////////////////////// // Power up: Puede caminar. function DKVsMario () { Distancia = IA._x-Player._x; if (Distancia > 0) { IA._x = IA._x-DKSpeed; IA.Action2 = "Walking"; } else if (Distancia < 0) { IA._x = IA._x+DKSpeed; IA.Action2 = "Walking"; } else { IA.Action2 = "Quiet"; } IATurn = IATurn+DKSpeed/2; if (IATurn >= 10) { IATurn = IATurn-10; IA.play(); } }
El juego sería de que recibirán un ataque y deben entrenar. Irán ganando poderes y esas cosas. Se desbloquearían más personajes, etc, pero ya es otro tema.