Octubre 08, 2012, 01:32:25 AM Ultima modificación: Octubre 08, 2012, 03:54:51 AM por penumbra
Hola. Espero explicarme bien y no enredar la cosas. Como dice el título, en el evento CREATE de mi objeto controlador, he puesto

item1 = object_add()

Luego tengo un script al cual llamo desde el evento STEP, que hace esto

if ( object_exists(item1) ) = true {
    object_set_sprite(item1, mi_sprite) }


Y después de eso, estoy en blanco  :(

Lo que quiero hacer a continuación, es agregar código para el evento step del objeto item1, dicho código manejará la colisión de item1 con el piso: si hay espacio libre debajo de item1, la gravedad será tal, si no hay espacio, cancelar la gravedad y colocar item 1 sobre el borde del piso. Lo de la gravedad y las colisiones no es difícil, pero no sé cómo referirme al evento step del objeto item1, ya que este es un objeto creado en tiempo de ejecución y no através de la interface principal del GM.

Leyendo el manual, entendí que probablemente debo usar esto:

object_event_add(ind,evtype,evnumb,codestr)

Lo malo es que esta función es nueva para mi, y seguramente la estoy usando mal (la puse en el evento CREATE del objeto controlador, no sé si esté bien ahí).  Aquí surgen mis preguntas, creo que el parámetro codestr es el código que deseo utilizar para el evento, pero obtengo error cuando quiero agregar más de una línea de código (sólo me acepta la primera línea, en este caso, mi primera línea es

item1.colision_piso =  collision_line(x, y+32, x, y+vspeed, obPiso, 0, true)

Si quiero agregar más líneas, el editor me marca error porque falta un símbolo, o algo así. Ahora, sé que con mi poca experiencia en GML, lo más fácil sería desechar este método, crear el item1 desde la interfaz de GM, y agregar código al evento step usando "execute script" o "execute code", pero mi honor y orgullo de desarrollador novato quedarían destruídos, y si alguna vez me cruzara con estas funciones "misteriosas" saldría huyendo para no verlas más XD

Así que espero que alguien con más experiencia, sea tan amable de indicarme dónde y cómo meto el código para el evento step de mi objeto. Gracias, y una disculpa si me extendí mucho


Creo que tu problema es que nunca creaste una instancia de ese objeto:
pone:

It1 = instance_create(0,0,item1);

con esto la ID del la instancia sera It1.

Cosa que cuando pones:

item1.colision_piso =  collision_line(x, y+32, x, y+vspeed, obPiso, 0, true)

Estaria mal porque no tiene una ID de una instancia sino de un objeto. Para que quede bien pone:

It1.colision_piso =  collision_line(x, y+32, x, y+vspeed, obPiso, 0, true);



---------------------------------------------------------------------------------------------------------------------

Pero te recomiendo hagas un objeto (sin codigo) con atributos genetales y crees intancias de él.

Hola romon, gracias por responder.

Dicen que la necesidad es la madre de la inventiva, y por fortuna, después de mucho batallar, al final conseguí hacer trabajar a la función object_event_add().

Entiendo lo que dices, pero investigando en los foros en de yoyo games, leí que la función object_event_add() no se puede usar después de crear la instancia, sino antes. ¿El motivo?

1. Una instancia no es un objeto: los objetos pueden tener  eventos, las instancias no.

2. Por lo tanto, dicha función no agrega código a una instancia en particular (no se puede), sino al objeto.

3. La otra razón es que si una instancia ya existe, no se puede modificar. En el manual de gML se indica algo así como: "Nunca modifiques un objeto para el cual ya existan instancias"

Por tales motivos, object_event_add() se usa antes de crear cualquier instancia del objeto en cuestión. Aun así, no encontré un ejemplo claro de su uso hasta que estuve probando y logré hacerla furular

Gracias de nuevo, y espero que la información de arriba sea útil para alguien en algún momento.   ;D

   Saludos makero penumbra:


   Pues sí, tal y como lo dices hay marcadas diferencias entre una instancia y un objeto.

  Un objeto viene siendo la plantilla donde escribes (programar) cómo serán las instancias de es objeto. Ellos describen el funcionamiento que tendrán sus instancias a partir de eventos con sus acciones.

  Las instancias son las representaciones físicas (digital) del objeto que representan. Se construyen a partir del objeto, copia fiel.

  Si un objeto ya tiene instancias corriendo por el mundo ("room") no se puede cambiar la forma en que están compuestas esas instancias, pero si un objeto no tiene instancias creadas se puede modificar mientras lo necesitemos. Una vez que tenga instancias creadas su funcionamiento tomará como guía al objeto que representan por eso no pueden cambiar esa guía si se está utilizando.

  ¿No se si fui claro o compliqué más las cosas?   :-[ 

  Gracias por la atención prestada y disculpen las molestias ocasionadas.  ;D


Sí, quedó claro,  a menos que alguien más diga lo contrario  :-[

Lo malo es que yo hasta hace unos días, desconocía esta información, lo que me provocó varios quebraderos de cabeza, pero bueno, ese es el camino del principiante  ;D

Saludos, Makero

u.u eso no lo aclare porque lo daba por entendido. Pero me equivoque. Tendria que aclarar un poco mejor para la proxima..

Otro punto de vista:
Yo diria que un objeto es como el molde de torta.
Y una instancia es como la torta misma.

Entonces, podria decir que, no podrias crear la torta sin su molde. Por lo tanto podemos decir que el molde tiene que existir primero.

- ROMON -