FERHAND aca te adjunto imagenes completas de animacion del personaje de costado asi ves todo lo que hace cada una de las animaciones y de ahy calculas las colisiones, los tamaños y eso y calcula que para todos lados es generalmente igual salvo arriba y abajo que quizas se acorta un poco la imagen por la direccion en la que se hallan, espero con eso encuentres la solucion ya que necesito implementar el sistema lo antes posible. gracias.-

   Saludos makero the_blade:


   Disculpa nuevamente por los retrasos y las faltas de ortografía, esta PC que estoy utilizando hoy no tiene corrector para el español.  :-[

   Como habíamos acordado, las medidas de 89 x 49 px son las medidas optimas para nuestra cuadricula (grilla). Ese sera el espacio menor que ocupara cualquier unidad. El área de un elemento puede ocupar uno o mas cuadros de dicho tamaño. Ejemplo: Una casa, un segmento de un muro, un personaje, etc.

  Los elementos que son fijos, no tienen animación, no requieren de un objeto por cada uno para ser representados. Un solo objeto puede encargarse de el dibujado de todos los elementos fijos. Estos elementos no se moverán de su sitio por lo que las posiciones en la matriz serán fijas. Estos a su vez se pueden dividir en dos grupos:
   * los que no colisionan con nadie
   * y los que son obstáculos, o sea colisionan con todos.

  Estas diferencias debemos marcarlas en la matriz para que al chequera las posiciones en busca de posibles colisiones se detecte a tiempo los objetos obstáculos. Por ejemplo: un numero cero (0) para las posiciones en blanco, un numero uno (1) para los elementos que no colisionan,  un numero dos (2) para los elementos obstáculos que no se mueven ni tienen animaciones, un numero tres (3) para los elementos obstáculos que no se mueven pero si tienen animaciones, un numero cuatro (4) para los elementos obstáculos que son móviles pero no causan daño, un numero cinco (5) para los elementos obstáculos que son móviles y si causan daño, etc...

Por supuesto ya hemos hablados de los elementos que causan daño, que son móviles, que son obstáculos, etc. Todos estos elementos ocupan uno o varios cuadros de 89 x 49 px.

  Actividades a realizar:

  *  Crear un nivel para pruebas con los elementos colocados en un "room" que tenga una cuadricula isometrica de (89px  x 49 px). Tener en cuenta que los espacios transitables entre los elementos obstáculos debe ser de un cuadro o mas. Ningún espacio para pasar puede ser menor de estas medidas. 
  * Crear un objeto controlador que se encargara de contener la matriz, dibujar los elementos fijos, etc.
  * Agregar una matriz área ("array") a todos los objetos que representan elementos en el mundo. Dicha matriz contendrá todos los cuadros  que ocupa dicho elemento. En el espacio [0,0] se colocara la cantidad de cuadros total que ocupa dicho objeto, el resto de los espacios los explicare con un ejemplo en .gmk.
  * Crear un "script"que reciba la posición (X e Y) de un objeto y el cuadro a chequear colisión (con dos números) y que sea capaz de devolver el tipo de colisión posible en el cuadro indicado. Ejemplo:

   argument0 = #    // valor de coordenada X del elemento
   argument1 = #    // valor de coordenada Y del elemento
   argument2 = #    // valor de desplazamiento a partir del cuadro pivote del elemento
   argument3 = #    // segundo valor de desplazamiento a partir del cuadro pivote del elemento

   return #               // el numero que esta guardado en la matriz en dicho cuadro. (0, 1, 2, 3, 4, etc)

nota: este "script" sera reutilizado pues determina en un cuadro indicado que elemento se encuentra para realizarle transformaciones. Ejemplo: al moverse comprobar si se puede mover en la dirección de ese cuadro, al atacar comprobar si golpeo en esa dirección, etc.

  Lo difícil de explicar es el hecho de guardar en un "array" los cuadros ocupados por un elemento en forma de referencia a partir de un cuadro determinado como pivote. El cuadro pivote sera el cuadro (espacio de la imagen) al que se le colocara el centro de la imagen en el editor de GM. Cuando se posicione en el "room" el objeto sera por estas coordenadas. El resto de los cuadros que ocupa se escribiran relativos a este cuadro, por ejemplo: un cuadro mas arriba, dos cuadros a la derecha, etc. Claro se escribiran de forma matematica, con numeros. La importancia de esto es que no importa donde se coloque el elemento siempre sera posible determinar los cuadros que lo componen necesitando solo este "array area" y la posicion (X,Y) del elemento.

Esto sera mejor con un ejemplo, por lo visto tendré que programar...  :'( 

  Eso si, con estas medidas el tamaño del paso al desplazarse sera del tamaño del cuadro de la cuadricula (89 x 49 px) o sea un objeto caminara desde una cuadricula a otra, nunca se detendrá en el intermedio. Esto lo veo en muchos juegos en aras de gestionar mejor las colisiones y el orden de dibujado...

Si esto les parece bien... solo queda ponernos manos a la hora...

  PD:  dame un tiepo para el envío del ejemplo con las matrices, los tipos de objetos posibles, etc.


Ferhand me parece perfecto y si quiero tener ese sistema en mi juego, lo unico que te pido es que una vez que me pases el editable si no logro entender algo por favor me ayudes a adaptarlo a mi engine asi ya estaria todo listo. y bueno nuevamente muchas gracias amigo y bueno espero el editable entonces. un abrazo.-

  Saludos makero the_blade:

  Aca te dejo la primera parte del editable para que comprendas mas o menos por donde empezar.

  En el se expone una pequeña matriz de 6 x 6 cuadros donde se colocan a cero (0) los espacios vacíos y a uno (1) los espacios ocupados por los bloques.

  Trata de recorrer el código que es lo básico para emprender este sistema. Si tienes dudas redactalas y te las contesto mañana.

  Un abrazo...  ;D


#34 Octubre 16, 2012, 10:36:08 PM Ultima modificación: Octubre 16, 2012, 10:48:54 PM por the_blade
ahy lo pruebo ferhand gracias.-
PD: ahy lo probe mas o menos por lo que vi generastes una matriz, donde los 0 son espacios vacios y 1 los ocupados y dibujastes una caja en la primera posicion de la grilla, con el tamaño de 98x49 verdad, en el segundo room no entendi bien que es lo q hace por lo visto solo colocastes graficos en la grilla, ahora se supone q todo lo que cargue en el room sera a atraves de codigo verdad, osea cada objeto del juego sera colocado desde codigo verdad, o exite la posibilidad de alinearnos acorde a la grilla definida en el room desde el mismo editor y desde codigo verificar que ese espacio donde se halla determinado objeto por ejemplo esta ocupado? eso haria mas facil la edicion de mis rooms. salu2.-

Cita de: the_blade en Octubre 16, 2012, 10:36:08 PM
ahy lo pruebo ferhand gracias.-
PD: ahy lo probe mas o menos por lo que vi generastes una matriz, donde los 0 son espacios vacios y 1 los ocupados y dibujastes una caja en la primera posicion de la grilla, con el tamaño de 98x49 verdad, en el segundo room no entendi bien que es lo q hace por lo visto solo colocastes graficos en la grilla, ahora se supone q todo lo que cargue en el room sera a atraves de codigo verdad, osea cada objeto del juego sera colocado desde codigo verdad, o exite la posibilidad de alinearnos acorde a la grilla definida en el room desde el mismo editor y desde codigo verificar que ese espacio donde se halla determinado objeto por ejemplo esta ocupado? eso haria mas facil la edicion de mis rooms. salu2.-
  Saludos makero the_blade:

  El otro "room" fue solo para determinar las medidas de la matriz.  :-[

    En el editor de "rooms" lo que colocamos son objetos con o sin "sprites", pero objetos en sí. Lo que queremos es tener la menor cantidad de objetos en el "room" y que un solo objeto dibuje los elementos no móviles, para eso necesitamos guardar las posiciones donde va cada uno de ellos. Incluso, si te fijas mejor verás que el ejemplo es solo para elementos de un solo cuadro. En el caso de que un elemento tenga más de un cuadro debemos tener otros datos según el tipo del elemento. Datos como: un identificador para cada tipo de elemento, una matriz donde se guarde la cantidad de cuadros que tiene dicho elemento y el desplazamiento del resto de los cuadros a partir del cuadro pivote. Esta última matriz se utilizará para cuando se vaya a colocar un elemento en el "room" se puedan colocar todos los cuadros de los que está compuesto.

  Esto es un poco difícil de entender, déjame realizar un ejemplo editable de un objeto con varios cuadros.  :-[

  Tienes razón, será más complicado editar los "rooms" de esta forma, pero es el precio a pagar por tener mejor eficiencia. Una manera que yo utilizo es crear un objeto con cada imagen a colocar y colocar los objetos en el "room" como quiero que queden. Luego determinar cual fila/columna ocupa el cuadro pivote de cada objeto y esa será la posición para rellenar en le matriz. Los niveles serán lentos de diseñar, pero más eficientes.  8)

  Ahora debo irme a casa, hablamos mañana...Disculpa, pero parece que no habrá tiempo para tenerlo todo el día 20... :'( 


gracias ferhand si es seguro de que no llegamos para ese día asi que no te hagas drama por ahora opte por el sistema de path comun y corriente el cual para esta expo va a andar bien y bueno cuando mas o menos lo tengas vemos asi lo implemento en el juego pero mas tranquilo. nos vemos.-

   Saludos makero the_blade:


  Ahora mirando mejor el ejemplo encontré un error que yo ya sabía que debía tenerlo en cuenta, pero se me pasó. Los valores (X,Y) para mostrar los elementos en el "room" no son afines a todas las filas. Al ser isométrica la cuadrícula las filas consecutivas no coinciden en la misma columna. Por ejemplo las filas pares coinciden las columnas entre sí pero no con la impares y las filas impares coinciden entre sí pero no con las pares.

Eso debe estar reflejado a la hora de mapear de una celda de la matriz a una posición del "room". Lo tendré en cuenta en el ejemplo próximo.

  disculpa la demora, hermano... ya se que lo implementaremos con tiempo, aun así me siento presionado... :-[   


Muchas gracias ferhan y no te sientas presionado no es tu responsabilidad ayudarme, asi que si en algun momento te aburres lo entendere. saludos amigo y gracias por la atencion.-

   Saludos makero the_blade:


   Esta es la actualizacion...  8)


   ...Espera proximo ejemplo...  ;D



ferhand respecto a lo que me pedistes por mensaje privado te comento que porahora no tengo objetos animados en el escenario mas q los personajes como el que te mande, lo demas son edificios arboles, etc pero graficos fijos por ahora.-

Cita de: the_blade en Octubre 22, 2012, 11:35:09 PM
Dale ferhand ahy lo pruebo gracias..
  No olvides preguntar...  XD


ferhand por lo que estoy viendo el codigo lo que hace es dibujar desde un solo objeto los sprites diferentes y los objetos que tenes ahy no lo estas usando verdad? osea dibujas el sprite y a su vez comprobas si determinada area esta ocupada por dicho sprite?

Cita de: the_blade en Octubre 23, 2012, 12:07:33 AM
ferhand por lo que estoy viendo el codigo lo que hace es dibujar desde un solo objeto los sprites diferentes y los objetos que tenes ahy no lo estas usando verdad? osea dibujas el sprite y a su vez comprobas si determinada area esta ocupada por dicho sprite?
  Saludos makero the_blade:

  Es cierto que dibujo los elementos a través de un solo objeto. Este objeto lee de la matriz los valores y a partir de ellos dibuja. Pero no he chequeado aun si el espacio está ocupado.

  Para chequear si un espacio está ocupado solo tengo que entrar en la matriz y ver el valor de esa celda, según el valor estará ocupa o no y puedo saber por quién. Solo necesitas escoger una numeración para los diferentes elementos visuales. Mi propuesta es que escojas números enteros y que escojas un rango continuo para los elementos con colisión.

  Esos números enteros serán un número por cada elemento. Por ejemplo: arbol=1, caja=2, casa=3, muro=4, etc. Esos números enteros corresponden con un cuadro, el cuadro pivote, en caso de que un elemento tenga más de un cuadro se utilizará el numero fraccionario. Por ejemplo: casa=3, pero está compuesta por cuatro cuadros en total por lo que el resto de los espacios en la matriz ocupados por la casa tendrán el valor= 3,5. En la matriz se verán cuatro celdas para la casa una con el valor 3 y el resto con los valores 3,5.

¿No se si entiendes?

Necesito alguna imagen con más de un cuadro de área para el próximo ejemplo. Yo mismo me encargaré de crearle alguna animación para ejemplificar también el dibujado de subimágenes.