Saludos makero the_blade:


  Necesito saber como quieres que se gestione el juego, saber como lo has hecho:

  * tamaño de los "rooms"
  * tamaño de las "views"
  * saber si vas a gestionar todo el "room" o solo la "view" u otra área
  * saber cómo se mueven los personajes, qué función utilizan,  si utilizan motion_set(), move_towards_point(), etc.
  * Todos los detalles globales para poder tener una idea de que vamos a gestionar...


bien ferhand te comento las room generalemente son grandes aunq las he divido en varios, de aproximadamente 6000x3000, el tamaño de las view por ahora utilizo 1920x1080 debido a la resolucion de mi monitor pero la idea es que se adapte a cada pc, todo lo que se ejecuta durante el juego se hace solo dentro de la view, todo lo que esta afuera se dashabilita, por una cuestion de mejorar el rendimiento, los personajes en primera instancia se estaban moviendo con el mp_potential_path aunq se pone muy lento por eso queria utilizar mp_potential_step, luego los personajes llevan muchisimos sprites divididos por direccion, osea en ocho direcciones y cada direccion guarda la animacion de correr, parado, atackar, herido, muerte1, muerte2, con un tamaño de sprites de 173x227, los arboles, los arboles 446x440, las cajas 91x101, un monumento 346x291 (solo te dije estos por darte algunos ejemplos de la diferencia de tamaños), la room tiene snapx y snapy de 16, pero porque esta predeterminado asi de eso no cambie nada, y el personaje principal se utiliza tanto para enemigos como jugador y con una variable diferenciamos y a su vez en el evento endstep seteamos todos los sprites, acorde al tipo de personaje, a su vez tiene una maskara de 41x50. y bueno no se que mas decirte.-

  Saludos makero the_blade:


   Revisando el GM, en l asección de edición de "rooms" me percaté de una pregunta que no te había hecho:

   ¿Cuál es el ángulo del "sistema isométrico" utilizado por ti?  Me explico:

    Un cuadro de un sistema isométrico tiene sus cuatro lados iguales, pero la línea que lo cruza de arriba hacia abajo es más corta que la línea que lo cruza de un lado a otro.

  Para haber construido un sistema isometrico debes haber utilizado un tamaño de cuadro común para todas las piezas. Ese es el cuadro que utilizaremos para la matriz y para las colisiones. Esa es la medida que estoy necesitando: La dimensión de las líneas que cruzan los cuadros bases que conforman el área de superficie de los objetos.

  En las imágenes que te envié se muestran los cuadros de que hablo; serían los rombos de colores que formaban el área que ocupaban los objetos cilindro y pared de la imagen.


Saludos ferhand en realidad te comento que para implementar el sistema en si si bien creo que se ve bien no hice nada complicado simplemente dicha perspectiva esta ajustada desde el modelador 3D, en el mismo programa de diseño que utiliza (Blender 3D), y luego las imagenes ya me las envia en esa perspectiva, entonces lo unico que hago es editarlas  y cargarlas en el game maker, y a cada objeto le doy profundidad con el codigo este:

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Profundidad Del Objeto
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
depth=-Z;Z=y

en el evento Create.-

  Makero the_blade:


  En un entorno 3D, el hecho que tenga vista isométrica es por el ángulo de la cámara con respecto a la superficie del suelo. Pero en un ambiente 2D las bases de los objetos son rombos, más largos que altos, para dar la sensación isométrica. Siempre la base es una figura romboide y las medidas que las cruzan son las utilizadas para colocarlas en el mapa, desplazarlas o chequear colisiones.

  Si realizaste las imágenes en un editor 3D, lo más probable es que no tengas las medidas que te pido, pero estas pueden inferirse de las imágenes ya creadas. ¿Cuando tomas las fotos de los elemento 3D las tomaste desde la misma altura? ¿No acercaste o alejaste la cámara de los objetivos? Si todos los elementos 3D fueron tomados a la misma distancia significa que todos tienen las mismas medidas en los rombos que conforman las bases. Podemos determinar por comparación las medidas mirando tres imágenes distintas en tamaño en el editor de GM.

  Puedes pasarme tres imágenes para intentarlo o puedes hacerlo por ti mismo. Es sencillo:

  1 Toma una de esas imágenes y a través del editor de imágenes de GM, colócale el centro en la esquina izquierda de la posible base de la imagen.
  2 Crea un objeto y después de adicionarle la imagen, ponlo en un "room".
  3 Luego selecciona la opción de ver las cuadrículas en perspectiva y comienza a cambiar el tamaño de las mismas hasta que veas que las líneas coinciden con los bordes de la base de la imagen.
  4 Repite todo des el principio pero con otra imagen y con otro objeto en el mismo "room", hasta terminar con las tres imágenes y ya tendrás las medidas del rombo. El resto es puro Pitágoras.

  Puedes hacer como quieras, pero si me envías las imágenes hoy tendré el resultado para el Lunes, lo peor es que tendrías que enviarlas antes de una hora pues se cierra el centro de trabajo y me voy a casa.

  Como prefieras...  ;D


como bien dijistes ferhand no tengo dichas medidas, dado que el ajuste isometrico lo hace mi hermano desde el editor 3d, por eso opte por enviarte dichas imagenes dado que si implementas tu sistema seguramente sera un modelo a seguir para ya instalarlo en mi engine y utilizarlo asi, aqui te adjunto las 3 imagenes en formato de game maker.-

  Makero the_blade:


  Creo quwe tengo ya la medida que utilizaremos en la matriz de tu juego.

  Aquí te envío un editable con un "room", mira en la edición del "room" las medidas de los rombos a utilizar...


perfecto ferhand ahy lo vi es 98 x 49 y me parece perfecto porque de hecho nunca habia utilizado o prestado atencion al tema de las grillas y creo que tenes razon puede ser la medida correcta, estoy seguro que con ese sistema va a quedar perfecto.-

    Saludos makero the_blade:

   Ya sabemos las medidas de los cuadros de la cuadrícula. Todos los niveles deben tener medidas que sean múltiplos de esos números [98 px x 49 px]. La matriz que crearemos será una representación "cartesiana" de esas posiciones, las filas y columnas de la matriz se multiplican por estos números y tendremos la posición en el "room". Por ejemplo:[a,b]=[filas, columnas] La cuadrícula [1,1] está ne la posición[1*98, 1*49] = [98, 49], la cuadrícula [2,3] está en [2*98, 3*49] = [196, 147]

  Solo debemos acceder al valor guardado en la matriz para saber las posiciones que están ocupadas o vacías. Para saber la posición en el "room" solo debemos multiplicar las medidas de los cuadros por las filas y columnas de las posiciones chequeadas.

  Una limitante en este sistema es que en un cuadro solo puede estar un objeto y un objeto solo puede estar en un cuadro. Con esto quiero decir que si en tu sistema un personaje pudiera caminar medio cuadro en este puede caminar como mínimo un cuadro de 98 x 49 completo. No puedes estar con una mitad del cuerpo en un cuadro y la otra mitad del cuerpo en otro cuadro. Esto tal vez cambie la forma que tienes de desplazar los objetos.

  En caso de requieras que un objeto personaje pueda posicionarse a mitad entre un cuadro y otro debemos tener entonces otras medidas de cuadro, una que coincida con el tamaño del paso de los personajes. ¿Esto es sí? ¿Cómo funciona el desplazamiento en tu mundo? ¿Se avanza un cuadro completo en cada paso o la medida de recorrido está dada por otros valores? ¿Caminan también en diagonal? Se que deben caminar en diagonal pues me comentaste que un "sprite" de un personaje tiene ocho posiciones.

  Necesito saber las respuestas a estas preguntas para entender mejor las peculiaridades de este mundo.

  estoy en línea...  ;D 


bien ferhand en si te comento los personajes se mueven en ocho direcciones, y si en diagonal tambien y respecto  a lo que dijistes te diria que seguramente en mi juego seria necesario que a veces pisen en la mitad de algun recuadro por el ello que como tiene animacion cuando corren si caminas de a cuadros grande seguramente no quedara acorde la animacion con lo que avanza, y por otro lado tene en cuenta que si te basas en los sprites para las medidas de los recuadros quizas tienen un recuadro grande por ejemplo los sprites de los personajes por una cuestion de que como las animaciones estan divididas por direccion, entonces por ahy pasas que en un mismo sprite tenes la animacion de parado la cual no requiere un cuadro tan grande si le recortamos los bordes, pero no puede ser asi porque la animacion de muerte ocupa mas espacio en el recuadro, es entonces para que entre todas las animaciones bien que se opto por esa medida de recuadro en los sprites y no se recorto tanto.-
te paso un ejemplo que baje capas lo podes adaptar porque no se si se adapta al sistema que me estas planteando, es mas seguro tu sistema es mejor.
cualquier cosa si conseguis armas algo o cualquier cosa avisame ferhand yo ahora tengo que salir pero mañana me conceto todo el dia a ver si podemos solucionar este sistema. muchas gracias.-

ferhand de acuerdo a lo que preguntabas de los movimientos, bueno te adjunto una imagen del personaje principal moviendose de costado, y te cuento que se mueve el personaje sumandole a x 10, osea x+=10 al pulsar la tecla derecha por ejemplo, te la adjunto asi podes probar y verificar que quede bien la animacion acorde  a lo que avanza. salu2.-

   Makero the_blade:


   Sabiendo que necesitas posicionar un objeto personaje entre dos cuadros de los ya mencionados no utilizaremos esa medida de cuadro para desplazarnos.

  Si queremos un sistema de colisiones eficiente debemos tener menos puntos que recorrer para chequear. La matriz era para eso, cada 98 x 49 píxeles se contarán como uno solo y el recorrido se reduce considerablemente. Además el chequeo se limita a solo conocer el valor de una celda de un "array" que es mucho más eficiente que chequear si en ciertas coordenadas hay un objeto y tener que revisar todo el "room".

  De la medida que lo vayamos a realizar, al menos los objetos estáticos como muros y casas deben estar posicionados con cierta relación. Osea deben corresponder a algún sistema de cuadrícula (grilla) que escojas, no pueden estar posicionados al azar. Es posible que tengas que mover muchos objetos inmóviles de lugar para lograr esto. De esta forma utilizaríamos la cuadrícula para saber las posiciones ocupadas y crear un camino ("path"). Un camino se puede crear con un nodo de partida, otro de llegada y el tamaño del nodo (cuadro, paso). Si tenemos una matriz ("array") que contiene las posiciones de los objetos es más fácil determinar el camino, el problema es el tamaño del nodo (cuadro).

  No tiene desplazarse todo el nodo en un solo paso, este se puede recorrer en varios pasos, pero si evitará todo un nodo en el que haya algún objeto a evitar. Le pasará a un nodo de distancia a no ser que la medida sea más pequeña, como por ejemplo un cuadro de 98 x 49 px esté compuesto por cuatro cuadros del tamaño de un cuarto de un nodo. En este caso cambiaríamos el tamaño de nodo a uno más pequeño y listo funciona igual.

  Repito, no tenemos que desplazar los objetos tanto espacio, pero sí necesitamos una medida que contenga a todos los objetos del mundo. Una medida con la cual se pueda decir dónde está cada objeto del mundo, sin importar que un objeto ocupe varios cuadros él solo y otro objeto ocupe solo ocupe uno de esos cuadros, eso sí, la medida debe ser de carácter general, sin excepciones.

  Veré si veo otra medida en casa con las imágenes que me mandaste.  ;D   

PD:  ¿Escogiste el tamaño del paso del personaje según la velocidad de animación? ¿Qué acaso eso no lo escoge el programador y no el "sprite"? Con esa calidad de imágenes solo necesitan un buen motor no necesitan estar haciendo el juego según lo que tienen, sino según lo que quieren.

  La animación no debería ser una medida de avance. Ustedes deben escoger la medida que se ajusta a su sistema. Por lo que me dices el objeto camina 10 px en cada paso, pero ¿es esa la medida del área que ocupa en el mundo? ¿Él entonces se desplaza menos distancia que el área que ocupa? 


#27 Octubre 10, 2012, 06:16:35 AM Ultima modificación: Octubre 10, 2012, 06:31:35 AM por the_blade
si ferhand por eso necesito tu ayuda para implementar el sistema, y bueno la idea es que el engine sea lo mas rapido y dinamico posible y en cuanto a la animación que me decis de cuando corren, por supuesto que la velocidad la definimos nosotros los programadores, lo que yo te queria decir es que quizas si tomabas el tamaño de las grillas para los avances por ahy quedaba mal, osea supongamos pulsas la tecla derecha y reproduce la animacion de correr normal pero avanza de a dos cuadros por ves y entonces en lugar de correr daria la sensacion de que hace un salto en largo, pero era solo una suposicion por eso te pase un ejemplo de animacion asi de esa forma vos vas a poder buscar quizas con las medidas que ya definistes la forma de que el personaje se mueva de manera correcta y acorde a la animacion que reproduce y lo haga de manera fluida, y de hecho si conseguis eso ya estaria casi listo porque todos los personajes tienen practicamente la misma animacion cuando corren, disparan o se mueven. bueno ferhand no veo la hora de que pongamos en funcionamiento tu sistema ya que como dices teniendo un buen sistema todo seria mas rapido y efectivo.-
PD: seguramente como me dijisten en su momento una ves que definas bien el sistema voy a tener que cambiar la posicion de varios objetos y adaptarlos acorde a las grilla seleccionada, de hecho va a ser asi porque dado que no tenia experiencia en este tema y gracias a vos me estoy interiorizando, todos los objetos estaban ubicado en el escenarios medio al azar, osea de acuerdo a como me gustaba pero no respetaba ninguna grilla y seguramente fue por eso que tenia problemas con las colisiones cuando utilizaba path o petential_step.-

  Saludos makero the_blade:


  La pregunta es ¿qué medida de avance quieren para su juego? Debo saber la medida para ajustar el diseño a ella.

  La matriz de colisiones la usaremos para determinar las áreas que están desocupadas. Debemos determinar ya una medida que ajuste lo más posible al tamaño de paso de los personajes. Si el tamaño es muy pequeño la búsqueda en la matriz se hará más lenta, pero la precisión a la hora de realizar los chequeos será igual de sólida.

Otro cambio es que los objetos estáticos como casas y árboles sean dibujados en los niveles por un solo objeto. Este objeto solo dibujará los objetos que estén en la "view", el resto no, así se agilizará el procesado del juego.

  Son cambios substanciales. Ahora mismo estoy mirando las imágenes para seleccionar un tamaño de paso posible.   


hola ferhand si queres utiliza la medida de avance que dijistes en un principio o otra que te paresca adecuada de acuerdo a las imagenes que te mande y de ultima si en algun monto ubiera que cambiar dicho tamaño por algun motivo calculo que no deberia ser tan complicado, en cuanto al dibujado de objetos desde uno solo habira que implementarlo pero por ahora lo que mas me interesa es aplicar la IA ya que en unos dias tengo una expo aca en mi ciudad y quieren que mostremos un demo del juego y lo idea seria poder mostrar el demo con este sistema ya listo por una cuestion de que no seria adecuado mostrar el juego y que tenga fallas o que los personajes caminen por arriba de las casas.jajajajaj. Saludos.-