Palabras reservadas en GML
Hola a todos. Hoy vamos a hablar de un tema importante en la programación. En cualquier lenguaje tenemos una serie de normas para que nuestro código pueda ser compilado perfectamente. En GML estas normas son bastante abiertas, como ya hemos visto. Por ejemplo, al final de cada sentencia se puede poner “;”, para indicar que esa sentencia ha acabado, pero no es obligatorio. En otros lenguajes como en Java si que es obligatorio ponerlo, sino nos dará un error de compilación. Hoy vamos a comentar una serie de aspectos a tener en cuenta.
Palabras reservadas
Por ejemplo, si quisiéramos ponerle a una variable el nombre if
, ¿que pasaría? Pues que no se puede, porque if
es una palabra reservada, keyword o palabra clave. Significa que hay una serie de palabras que Game Maker se las ha quedado para poder usar su lenguaje de programación. Ya hemos visto como van las sentencias condicionales y las sentencias de bucle en Game Maker, así que ya sabemos que palabras no podemos usar.
Funciones y variables de sistema
También hemos dicho que existen muchas funciones que Game Maker ha creado para que podamos usar. No podemos crear scripts que se llamen igual que esas funciones (en otros lenguajes podríamos sobreescribir esas funciones de una parecida a la herencia que hacemos en los objetos).
También existen una serie de variables que podemos usar, algunas relacionadas a objetos, otras a instancias, etc… Vamos a ver estas variables para el manejo de instancias.
self
Self lo utilizamos para referirnos a la propia instancia que estamos utilizando. No se suele utilizar esta palabra clave, ya que cuando utilizamos una variable no ponemos self delante. Pero todavía se usa para mantener la referencia, tal y como vemos en muchas acciones que podemos configurar.
other
La palabra clave other se utilizan en dos sitios completamente diferentes, pero siempre sirve para saber que nos referimos a otra instancia diferente a donde estamos ejecutando nuestro código. Podemos verlo cuando usamos with, mirar en el post para ver su uso, y también cuando estamos en un evento de colisión, para referirnos a la otra instancia implicada.
Es importante saber que en un evento solo habrá dos instancias implicadas. Aunque veamos muchas instancias colisionando, en cada evento solo hay dos instancias, lo que significa que tendremos varios eventos de colisión que se ejecutan casi a la vez.
Podemos acceder a las variables de other, incluso crearlas, pero cuidado de no equivocarnos de objeto, ¡podría generar un error! Un ejemplo sencillo de uso de other
health -= other.damage; //colisión con bala with (other) { instance_destroy(); } //podemos usar other en with
all
All se utiliza para comprobar todas las instancias activas, veremos en un futuro que podemos activar y desactivar instancias, de una room. No podemos acceder directamente a las variables de la intancia, poniendo por ejemplo all.direction = 0
, pero si utilizando with
.
with (all) { vspeed = 0; }
También podemos utilizar all en muchas funciones de sistema. Por ejemplo, si queremos detectar un objeto concreto que hay cuando hacemos click con el ratón, podemos usar la función instance_position()
.
inst = instance_position(mouse_x, mouse_y, obj_pause_Button); if inst != noone …
pero si quisiéramos detectar cualquier instancia, no un objeto en particular, podemos poner
inst = instance_position(mouse_x, mouse_y, all);
Como véis, es un recurso muy poderoso a nuestro alcance.
Por cierto, mouse_x
y mouse_y
son variables del sistema que nos dice en todo momento en que posición está nuestro cursor del ratón. En dispositivos móviles, dónde no hay ratón, se puede usar para saber dónde se ha hecho tap con el dedo.
noone
Esta palabra es un poco especial. Los que están habituados a programar conocerán la palabra null, que es muy parecida. Hemos visto el código anterior que hacíamos una comprobación con noone
.
if inst != noone
Se utiliza para saber que no hay instancias en una posición o colisión. Puede interesarte que no hay instancias para mover un objeto. En funciones implicadas con instancias, puede devolver el id de la instancia para ejecutar las acciones o no devolver nada, que sería noone. Es importante siempre hacer este tipo de comprobaciones sino queremos tener errores al manipular variables o acciones.
Conclusión
Hemos revisado que existen palabras que el sistema se reserva para poder programar, y hemos visto algunas de estas implicadas en las instancias. Hemos aprendido algunas palabras especiales, other, all, noone… ¡Ya sabemos un poco más a la hora de programar!
Exelente por fin pude aprender a usas esas sentencias Gracias!!