Differences

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


es:wmebook:ch2 2013/04/07 19:02 es:wmebook:ch2 2013/04/08 00:19 current
Line 1: Line 1:
-=====2. Guía para el sobreviviente de WME scripting=====+=====2. Guía para sobrevivir a la creación de scripts con WME=====
Line 250: Line 250:
Hemos visto lo básico de las variables, hay mucho mas sobre ellas, pero lo iremos viendo Hemos visto lo básico de las variables, hay mucho mas sobre ellas, pero lo iremos viendo
conforme vayamos avanzando. conforme vayamos avanzando.
- 
Line 377: Line 376:
Bueno ya hemos visto lo básico de los arrays, mas adelante haremos referencias a ellos para ir Bueno ya hemos visto lo básico de los arrays, mas adelante haremos referencias a ellos para ir
viendo las funcionalidades de los scripts en WME. viendo las funcionalidades de los scripts en WME.
 +
Line 657: Line 657:
puede tomar un valor entre 0 y 3( debido a la función Random ). Si a es igual a 0, se ejecutan puede tomar un valor entre 0 y 3( debido a la función Random ). Si a es igual a 0, se ejecutan
las tres sentencias que se encuentran tras el “case 0:” las tres sentencias que se encuentran tras el “case 0:”
 +
 +La palabra default, indica que ese bloque se ejecutará en caso de que el valor de la variable
 +sea diferente a las de los case anteriores.
La palabra reservada break sirve para decirle a wintermute que termine de evaluar el valor La palabra reservada break sirve para decirle a wintermute que termine de evaluar el valor
Line 693: Line 696:
definición de una función que contiene el bucle, pero esto lo veremos mas adelante. Solo definición de una función que contiene el bucle, pero esto lo veremos mas adelante. Solo
comentarlo, no se pueden usar bucles en los switch. comentarlo, no se pueden usar bucles en los switch.
 +
Line 795: Line 799:
Como vemos, en el script anterior declaramos una variable a inicializada a 0, después tenemos Como vemos, en el script anterior declaramos una variable a inicializada a 0, después tenemos
nuestro bucle while( condición). While significa mientras, luego mientras la condición que se nuestro bucle while( condición). While significa mientras, luego mientras la condición que se
-encierra entre paréntesis, sea falsa, estaremos ejecutando el bucle.+encierra entre paréntesis, sea verdadera, estaremos ejecutando el bucle.
¿Cuando terminará el bucle? Pues terminará cuando la función Random(0,5) que esta dentro ¿Cuando terminará el bucle? Pues terminará cuando la función Random(0,5) que esta dentro
Line 971: Line 975:
anteriores y podrás continuar sin problemas. Si algo no queda muy claro preguntad en foro anteriores y podrás continuar sin problemas. Si algo no queda muy claro preguntad en foro
oficial y se contestará o se intentará modificar para aclararlo. oficial y se contestará o se intentará modificar para aclararlo.
 +
===== 2.5 Clausula include ===== ===== 2.5 Clausula include =====
 +Como hemos visto, las funciones ofrecen mucha potencia al programa, pero como no existe
 +ninguna manera de declarar una función global, como hacíamos con las variables, hay de
 +hacer que las funciones que están en un script, se puedan usar en otros scripts, para ello hay
 +dos maneras de hacerlo, mediante la palabra reservada includes, o mediante objetos. Pero
 +primero veamos como se usa include.
 +
 +Si has echado un ojo a la demo de WME abras visto que cada script comienza con la linea:
 +
 +<code script>
 +#include “scripts\base.inc”
 +</code>
 +
 +Con esta linea, lo que estamos haciendo, es decir que queremos incluir este archivo de scripts
 +en el script donde estamos trabajando, en este caso estamos incluyendo el archivo base.inc que
 +tendrá una serie de funciones, variables, o trozos de código que podremos usar también en el
 +script donde lo incluyamos. Por ejemplo, si no quieres declarar tus variables globales cada vez
 +que las necesitas, puedes crear un fichero inc donde estén todas las variables globales
 +definidas, y ya con solo incluir este fichero con la palabra include, no tenemos que andar
 +escribiendo la declaración de las variables globales cada vez que vayamos a usarlas. También
 +es posible hacer esto con funciones, creas un fichero inc con las funciones, y después lo
 +incluiremos con la palabra reservada #include “ruta_y_nombre_del_archivo.inc”.
 +
 +Así no tendremos que copiar el código de la función en cada script donde queramos usarlo.
 +
 +**Nota:** fíjate que la linea #include “scripts/base.inc” no lleva punto y coma al final, y el nombre
 +y la ruta del archivo van entre comillas.
 +
 +Importante: no inicialices nunca las variables en el fichero a incluir, ya que si haces eso, estas
 +se inicializarán cada vez que hagas una llamada a un script que incluya ese fichero.
 +
 +
 +
 +===== 2.6 Objetos =====
 +
 +Veamos ahora lo que aporta la mayor funcionalidad a WME, los objetos, bien, empecemos
 +despacio, imagina que tienes un objeto de la vida real, por ejemplo, una mesa. Pero claro el
 +termino mesa no nos dice nada, es abstracto, ya que la mesa puede estar echa de plástico, de
 +madera, de metal, puede tener distintos colores, puede ser cara o barata, etc tiene muchas
 +propiedades, quizá nos convendría tener todas estas propiedades juntas para una mesa.
 +
 +<code script>
 +var mesa;
 +mesa.material=”madera”;
 +mesa.color=”negro”;
 +mesa.precio=100;
 +Game.Msg(mesa.precio); //se imprimirá el precio de la mesa por pantalla.
 +</code>
 +
 +Bien, lo que hemos echo aquí, es definir una variable pero en lugar de acceder a esta variable
 +directamente, hemos agregado una serie de atributos a la variable, ya no usamos la variable
 +como un contenedor de un valor, sino que lo usamos para almacenar varias cosas, es muy
 +parecido a los arrays pero en lugar de acceder por la posición, accedemos por un nombre de
 +atributo. En el ejemplo anterior accedimos al atributo precio del objeto mesa.
 +
 +<code script>
 +Game.Msg(mesa.precio);
 +</code>
 +
 +Seguro que estarás pensando esto es fantástico y maravilloso, pero si quiero crear 10 mesas,
 +¿necesito declarar 10 variables como esta? No, Seria muy tedioso.
 +Bien, la magia de los objetos no solo reside en sus atributos, sino que también se pueden
 +definir funciones para los objetos, todo el tiempo hemos estado trabajando con un objeto,
 +Game.Msg() y ahora acabas de descubrir que este método, es un método del objeto Game.
 +
 +WME trabaja mucho con objetos, y conforme te adentres en su funcionamiento, más te darás
 +cuenta de lo importantes y útiles que son.
 +
 +Bien, veamos como definir un objeto para algo mas de utilidad que para almacenar atributos.
 +
 +Bien primero crearemos un fichero donde definiremos un objeto, le llamaremos por ejemplo
 +mesa.script
 +
 +<code script>
 +#include “scripts\base.inc”
 +method initialize(material, color, precio)
 +{
 +  this.material=material;
 +  this.color=color;
 +  this.precio=precio;
 +}
 +</code>
 +
 +**Septima regla de sintaxis**
 +
 +Si quieres acceder al atributo o funcion de un objeto, usamos un punto como hemos visto en
 +los ejemplos anteriores.
 +
 +Usamos la palabra this, ya que como no sabemos a priori como le llamaremos al objeto, pues
 +this, es una palabra reservada para referirse al objeto el cual estamos creando.
 +
 +Esta es la manera correcta de definir la inicialización de un objeto.
 +
 +Veamos ahora una vez que hemos definido el objeto mesa.script como crear un objeto de este
 +tipo.
 +
 +<code script>
 +Var mesa1 = new Object(“mesa.script”);
 +</code>
 +
 +De esta manera creamos un objeto de tipo mesa, ahora podemos definir sus propiedades
 +llamando al método iniciar que creamos en el archivo mesa.script de la siguiente manera:
 +
 +<code script>
 +mesa1.iniciar(“madera”,”negra”,100);
 +</code>
 +
 +De esta manera en nuestra mesa ya quedarán definidos sus tres atributos, pudiendo acceder a
 +ellos con el nombre_del_objeto.nombre_del_atributo:
 +
 +<code script>
 +mesa1.material:
 +mesa1.color;
 +mesa1.precio;
 +</code>
 +
 +Podemos ir mas allá, veamos por ejemplo como crear 10 objetos de tipo mesa usando un bucle:
 +
 +<code script>
 +for( var a=0;a <10;a++)
 +{
 +mesas[a]= new Object(“mesa.script”);
 +}
 +</code>
 +
 +Aquí tenemos que tener cuidado, ya que no podemos hacer mesas[a].iniciar(material,color,precio);
 +ya que WME no soporta esto, para solucionarlo debemos hacer uso de una variable temporal, que
 +almacene cada objeto, lo inicialice y después lo vuelva a almacenar en el array.
 +
 +<code script>
 +var temp = mesas[a];
 +temp.iniciar(“madera”,”negra”,100);
 +mesas[a]=temp;
 +</code>
 +
 +Con estas tres lineas, obtenemos una de las mesas del array, la iniciamos, y después la
 +volvemos a guardar en el array, esto es necesario ya que como hemos dicho wme no soporta el
 +acceso a los atributos o métodos de los objetos guardados en un array.
 +Y ya solo se trata de practicar por unos mismo, y seguir con el tutorial que a partir de aquí
 +creo que con esto no tendrás problemas para entender lo siguiente.
 +
 +También es posible crear mas métodos para el objeto mesa, simplemente, en el fichero mesa.script
 +que habíamos creado, podemos añadir un método por ejemplo para cambiar el color de la mesa. Pues
 +añadiremos en el fichero del objeto mesa el siguiente método:
 +
 +<code script>
 +method cambiarColor(color)
 +{
 +  this.color=color;
 +}
 +</code>
 +
 +Y cuando creemos un objeto de tipo mesa, podremos cambiar el color de la mesa usando este método.
 +
 +<code script>
 +var mesa = new Object("mesa.script");//creamos el objeto
 +mesa.iniciar("metal","roja",300);// iniciamos sus valores
 +Game.Msg(mesa.color);//se imprimirá en pantalla roja
 +mesa.cambiarColor("azul");//cambiamos el color
 +Game.Msg(mesa.color);//se imprimirá en pantalla azul 
 +</code>
 +De esta manera podemos crear métodos para los objetos.
 +**Nota:** Método y función vienen a ser prácticamente lo mismo, con la diferencia principalmente de
 +que las funciones tienen funcionalidad por si solas, y los métodos siempre actúan sobre algún objeto.
 
es/wmebook/ch2.1365354162.txt.gz · Last modified: 2013/04/07 19:02 by dongo
Recent changes RSS feed Creative Commons License Driven by DokuWiki