Más sobre los objetos

Cuando creas un objeto en modo avanzado, puedes cambiar otras opciones avanzadas.

    Profundidad

Primero que nada, puedes configurar el depth (profundidad) de las instancias de un objeto. Cuando las instancias son dibujadas, según el depth se dibujaran una encima de otras. Las instancias con mayor depth son dibujadas primero, y las instancias con menor depth se dibujaran últimas.

Cuando 2 ó más instancias poseen el mismo depth, se dibujan según el orden en el que fueron creadas. Si quieres estar seguro que un objeto se encuentra por encima de los demás, introduce un valor negativo. Si quieres estar seguro que un objeto se encuentra por debajo de los demás, introduce un valor positivo muy alto. También puedes cambiar el depth de una instancia durante el juego usando la variable depth.

 

    Objetos persistentes

Puedes hacer persistente a un objeto. Los objetos persistentes continúan existiendo inclusive si pasan de una habitación a la otra. Estos sólo desaparecen cuando los destruyes expresamente. Así, solo es necesario poner una instancia del objeto en la primera habitación y seguirá apareciendo en las siguientes habitaciones. Esto es realmente muy útil cuando posees un personaje principal que debe moverse de habitación en habitación. El uso de objetos persistentes es una herramienta poderosa, pero también puede producir errores fácilmente.

 

    Parents

Todo objeto puede poseer un objeto padre. Cuando un objeto posee un objeto padre, este hereda las características del mismo. Dicho de otra manera, el objeto es una especie de variante del objeto padre. Por ejemplo, si tienes 4 pelotas distintas, llamadas  ball1, ball2, ball3 y ball4, y todos se comportan de la misma manera pero tienen sprites distintos, puedes hacer que ball1 sea el objeto padre de el resto. Así solo será necesario que establezcas los eventos y acciones para ball1. Las demás pelotas heredaran las características de ball1 y actuaran de la misma manera. De manera que si aplicas acciones a las instancias del objeto padre, estas también se aplicaran a las instancias de los objetos hijos. Por ejemplo, si destruyes las instancias del objeto ball1 también se destruirán las instancias de los objetos ball2, ball3 y ball4. Esta opción nos permite ahorrar mucho tiempo y trabajo.

 

A menudo, los objetos deben comportarse casi idénticamente pero suelen encontrarse pequeñas diferencias. Por ejemplo, un monstruo se mueve de arriba hacia abajo y otro hacia la izquierda y la derecha. En lo demás ambos monstruos poseen el mismo comportamiento. En este caso casi todos los eventos deberían poseer las mismas acciones, pero uno o dos podrían llegar a ser diferentes. En este caso podemos hacer a un objeto el padre del otro. Pero también debemos definir algunos eventos para el objeto hijo. Estos eventos se sobrepondrán a los eventos del padre. De forma tal que mientras un evento del objeto hijo contenga acciones, éstas se ejecutarán en lugar de las del mismo evento del objeto padre. Si además se requiere ejecutar el evento del padre, se puede 'llamar' al 'evento heredado' usando la acción apropiada.

De hecho, es una buena práctica en tales casos crear un objeto base, por ejemplo un objeto ball0. Este objeto contiene todo el comportamiento por defecto pero nunca se utiliza en el juego. Todos los objetos 'reales' tienen a este objeto base como padre.

 

Los objetos padre pueden así mismo tener padres, y así sucesivamente. (Obviamente no está permitido crear círculos.) De ésta forma se puede crear una jerarquía de objetos. Esto es extremadamente útil para mantener tu juego estructurado y es ampliamente recomendado aprender a utilizar éste mecanismo. También hay otra utilidad de los objetos padre. Permite heredar el comportamiento en colisiones para otros objetos. Permíteme explicar esto con un ejemplo. Supongamos que tenemos cuatro objetos 'suelo' distintos. Cuando una pelota golpea el suelo ésta debe cambiar su dirección. Este cambio debe especificarse en el evento colisión de la pelota con el suelo. Debido a que hay 4 distintos suelos necesitamos escribir código en 4 eventos colisión distintos de la pelota. En cambio, cuando se tiene un objeto base y éste es padre de los 4 suelos reales, sólo se debe especificar el evento colisión con éste objeto base. Las demás colisiones ejecutarán el mismo evento. Esto, igualmente ahorra mucho trabajo.

 

Tal como se indica, dondequiera que se utiliza un objeto, se involucrarán a sus descendientes. Esto sucede cuando, en una acción, se indica que ésta debe aplicarse a instancias de un objeto determinado. Lo mismo sucede cuando se utiliza la sentencia with en código (ver abajo). Y funciona cuando se llaman a funciones como instance_position, instance_number, etc. Finalmente, sucede cuando se hace referencia a variables en otros objetos. En el ejemplo anterior, cuando se fija la variable ball1.speed a 10 este cambio es también aplicado a los objetos ball2, ball3 y ball4.

 

    Máscaras

Cuando dos instancias colisionan ocurre un evento de colisión. Para decidir cuando dos instancias se interceptan, se usan los sprites de las mismas. Esto es suficiente en la mayoría de los casos, pero a veces se quiere basar las colisiones en distintas formas. Por ejemplo, si haces un juego isométrico, los juegos tienen una altura (para darles una apariencia 3D). Pero para colisiones solo es necesario usar la parte de abajo del sprite. Esto puede lograrse creando un  sprite por separado que es usado como máscara de colisión para el objeto.

    Información

El botón Show Information nos permite ver la información completa del objeto que también puede imprimirse si se quiere. Esto es útil cuando pierdes la vista de todas las acciones y eventos.