Differences

This shows you the differences between the selected revision and the current
version of the page.


es:wmebook:ch3 2013/04/09 18:05 es:wmebook:ch3 2013/04/10 20:13 current
Line 50: Line 50:
<code script> <code script>
-#include “scriptsbase.inc”+#include “scripts\base.inc”
//Ahora definimos las opciones iniciales de la escena //Ahora definimos las opciones iniciales de la escena
Line 530: Line 530:
Luego el script bomba.script tendrá el siguiente aspecto: Luego el script bomba.script tendrá el siguiente aspecto:
 +<code script>
include “scripts\base.inc” include “scripts\base.inc”
-for(var tiempo=6; tiempo>-1; tiempo = tiempo -1) /* Iniciamos un bucle que llevara la         cuenta desde que pulsamos la puerta */+for(var tiempo=6; tiempo>-1; tiempo = tiempo -1) /* Iniciamos un bucle que llevara la 
 +                                                  cuenta desde que pulsamos la puerta */
{ {
Game.Msg(“cuenta atrás: “ +tiempo);//Mostramos el tiempo que nos queda Game.Msg(“cuenta atrás: “ +tiempo);//Mostramos el tiempo que nos queda
Line 554: Line 556:
//Fin de nuestro script bomba.script //Fin de nuestro script bomba.script
</code> </code>
 +
 +Como ves la forma de trabajar siempre es muy parecida, desactivamos el control del jugador cuando este va a realizar alguna acción y siempre lo devolvemos al final. Así que nada, tenemos escrito nuestro script de la puerta, y nuestro script de la bomba que hará que si el jugador no abandona la escena en el tiempo establecido, en este caso son 7 segundos, ya que el bucle( “for(var tiempo=6; tiempo>-1; tiempo = tiempo -1)” ) realiza 7 interacciones, desde 6 hasta 0 contando ambos.
 +
 +Espero que se vayan entendiendo los script, y es muy importante que los analicéis y lo destripéis hasta que vayáis entendiendo cada linea, de esta manera, cogeremos soltura rápidamente, ya que si pasamos de algo que no entendemos, cada vez se irán añadiendo nuevas cosas y llegara un punto en que no entendáis nada, por eso es recomendable que entendáis bien cada script.
 +
 +Bien, veamos ahora el script de la región que llamamos salida, salida.script :
 +
 +<code script>
 +#include "scripts\base.inc"
 +
 +on "ActorEntry"
 +{
 +        var puerta = Scene.GetNode("puerta"); /* Almacenamos el objeto puerta en una variable
 +                                              en este caso el parámetro “puerta” debe ser el
 +                                              nombre que le diéramos a nuestra puerta en el
 +                                              editor de escenas */ 
 +       
 + Game.Interactive = false; //Desactivamos el control del personaje
 +        if (puerta.Active) // Preguntamos, esta la puerta activa?
 +        {
 +                actor.Talk("no volveré a mi piso hasta que no sepa que no puedo entrar en el
 +                            almacén"); /* El actor realiza un comentario si no hemos echo click
 +                                          sobre la puerta */
 +        }       
 +        else //Si la puerta esta desactivada
 +        {
 +                Scene.DetachScript("scenes\warehouse\scr\bomba.script"); /* Descargamos el script
 +                                                                            de la bomba */
 +                actor.Talk("uff! Estuvo cerca"); // Nuestro personaje suelta un comentario
 +                Game.ChangeScene("scenes\room\room.scene"); //Cambiamos la escena
 +        }
 +        Game.Interactive = true;  // Devolvemos el control del jugador
 +}
 +</code>
 +
 +Guarda todos los script, y ejecuta el juego para comprobar si todo funciona correctamente.
 +
 +Para finalizar este capitulo, realizaremos un pequeño cambio juego, no es necesario pero es para que veáis como resolver lo mismo de otra forma, si os fijas, en cada script debemos hacer uso del método Game.GetNode(“puerta”); para evitar tener que hacer esto en cada script, es posible usar una variable global que guarde si la puerta fue clickeada o no, de esta manera no será necesario desactivar la puerta, y mas adelante el jugador podrá seguir interactuando con la puerta, pero si ya habíamos realizado un clic anteriormente, el script bomba no se volverá a ejecutar, dando así potencia al juego.
 +
 +Bien, veamos los cambios que debemos realizar en nuestros script para realizar lo mismo mediante una variable global.
 +
 +**bomba.script**
 +
 +<code script>
 +#include “scripts\base.inc”
 +
 +for(var tiempo=6; tiempo>-1; tiempo = tiempo -1) /* Iniciamos un bucle que llevara la
 +                                                  cuenta desde que pulsamos la puerta */
 +{
 + Game.Msg(“cuenta atrás: “ +tiempo);//Mostramos el tiempo que nos queda
 + Sleep(1000); // Detenemos la ejecución del script durante 1 segundo
 +}
 +
 + Game.Interactive=false; //Desactivamos el control del jugador
 + actor.Talk(“estoy muerto, intentalo de nuevo); //Hacemos que el actor hable
 + Game.ChangeScene(“scenes\warehouse\warehouse.scene”);/* Volvemos a cargar la
 +                                                              escena, en esta función,
 +                                                              el  parámetro se refiere
 +                                                              al archivo de escena con
 +                                                              el que estábamos trabajando,
 +                                                              debe tener el nombre que
 +                                                              nosotros le hubiéramos
 +                                                              indicado */
 +
 + var puerta = Scene.GetNode(“puerta”); //Obtenemos el objeto puerta en una variable
 + puerta.active= true; // Volvemos a hacer activa la puerta
 +
 + global puertaClicked = false; /* Esta es la nueva linea añadida, con la que
 +                                        controlaremos si la puerta fue clickeada o no.*/
 +
 + Game.Interactive=true; // Devolvemos el control del jugador
 +</code>
 +
 +**Fichero salida.script:**
 +
 +<code script>
 +#include "scripts\base.inc"
 +
 +on "ActorEntry"
 +{
 +        var puerta = Scene.GetNode("puerta"); /* Almacenamos el objeto puerta en una variable
 +                                              en este caso el parámetro “puerta” debe ser el
 +                                              nombre que le diéramos a nuestra puerta en el
 +                                              editor de escenas */ 
 +       
 + Game.Interactive = false; //Desactivamos el control del personaje
 + global puertaclicked; /* Llamamos a la variable global que almacena si la puerta fue
 +                                clikeada*/
 + if (!puertaclicked) // Con la variable global preguntamos si puertaclicked=false
 + {
 +            actor.Talk("No volveré a mi piso hasta que no sepa que no puedo entrar en el
 +                            almacén"); /* El actor realiza un comentario si no hemos echo
 +                                        click sobre la puerta */
 +        }       
 +        else //Si puertaclicked=true
 +        {
 +            Scene.DetachScript("scenes\warehouse\scr\bomba.script"); /* descargamos el script
 +                                                                            de la bomba */
 +                actor.Talk("uff! Estuvo cerca"); // Nuestro personaje suelta un comentario 
 +                Game.ChangeScene("scenes\room\room.scene"); //Cambiamos la escena
 +        }
 +        Game.Interactive = true;  // Devolvemos el control del jugador
 +}
 +</code>
 +
 +Como podemos ver, en este caso ya no es necesario hacer uso del atributo Active del objeto puerta para saber si esta fue clickeada o no, esto da la ventaja que ya comentaba antes, que la puerta puede seguir activa después de hacer el primer clic, con lo que damos la posibilidad de que se pudiera seguir interactuando con ella.
 +
 +Hemos venido trabajando con un proyecto de ejemplo muy simple,en el próximo capítulo empezaremos un proyecto desde 0, espero que hayas entendido estos capítulos anteriores porque son cruciales para seguir con lo que vamos a ver ahora.
 +
 +
 +
 +
 +
 +
 +
 +
 +
 
es/wmebook/ch3.1365523513.txt.gz · Last modified: 2013/04/09 18:05 by dongo
Recent changes RSS feed Creative Commons License Driven by DokuWiki