Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - ferhand

181
  Saludos Amigo Mgbu:


  ¡Muy buena pregunta!  8)   

  Precisamente tienes ya la respuesta: utilizar el "with". Una vez dentro de la clausula "with" no estás referenciando al objeto inicial sino en al objeto que llamaste dentro del "with". Por ejemplo:


 
Citarinstance_id = array_instance[1,2];   //  esto es un sugerencia...
 
  with (instance_id)                             //   a partir de esta línea estamos dentro de la instancia nombrada..
   {
        motion_add(dir,(50/(dist+1)))
   }


  Mi sugerencia es que tengas las "id" de las instancias en una lista o "array" y las llames según necesites.  8)

  Espero hayas entendido... Un abrazo... ;D

182
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 12, 2012, 08:13:27 PM
   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.
183
   Saludos Buen Amigo Mgbu:


    En teoria el chequeo de colision por rectangulo debe ser mas eficiente, pero estoy seguro que GM los gestiona de manera muy parecida por lo que no creo que haya grandes diferencias.  :-\

  De todas formas siempre propongo que los chequeos de colisones los getiones tu mismo creando una estructura propia que se ajuste a tus necesidades. Muchas veces es posible que GM realice chequeos extras que no son necesarios para el proyecto en si y pueden conllevar a una sobrecarga del mismo.  8)

  Un abrazo y nos hablamos...  ;D
184
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 11, 2012, 04:50:28 PM
  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.   
185
Saludos makero sanchez1994:

   Dices que usas el "change_instance" para el ataque... Por qué simplemente no utilizas el cambio de "sprites" en vez del cambio de instancias. Es menos costoso...

  En el objeto colocas una variable que indique la dirección (mirar_direccion) en que está mirando (0)izquierda (1) derecha
  Otra variable (estado) que indique el estado en que está el personaje: "caminando", "atacando", "parado", "agachado", etc.

  Un "script" que contenga un "switch" para el estado, por ejemplo:


Citarswitch (estado)
   {
      case "caminando"
          if(mirar_direccion == 0)
            {  sprite_index = spr_caminar_izquierda; }
         else  {  sprite_index = spr_caminar_derecha; }
      break;
     
      case "atacando"
          if(mirar_direccion == 0)
            {  sprite_index = spr_atacar_izquierda; }
         else  {  sprite_index = spr_atacar_derecha; }
      break;

      case "agachado"
          if(mirar_direccion == 0)
            {  sprite_index = spr_agachar_izquierda; }
         else  {  sprite_index = spr_agachar_derecha; }
      break;
   }


 
   nota:  Colocas que cuando acabe cada animación de cada "sprite" vaya al estado neutro que desees, por ejemplo "parado" o que se repita la animación mientras no cambie de estado. Por cierto los cambios de estados se realizan por presionar algún botón, por ejemplo el de atacar, desplazarse a la izquierda o agacharse, etc...
 
   No se si entiendes lo que digo...  A mi me parece menos costoso y más fácil si quieres agregar nuevos estados.

  Gracias por la atención prestada y disculpen las molestias ocasionadas.  ;D
186
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 10, 2012, 12:04:01 AM
   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? 
187
   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
188
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 09, 2012, 10:57:15 PM
    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 
189
Juegos en desarrollo / Re:Tamgoch X [0.1]
Octubre 05, 2012, 11:58:39 PM
  Saludos Makero Iros:

  Me encantan los juegos de mascotas virtuales... XD XD

  Cuando logres hacer la ventana transparente para que quede flotando en el escritorio me gustaría aprender, si no es un problema para ti.   :-[


  Disculpas las molestias ocasionadas.  ;D
190
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 05, 2012, 11:53:05 PM
  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...
191
Juegos en desarrollo / Re:Zelda Upbringing
Octubre 05, 2012, 11:13:33 PM
  Saludos makero Night:


  Muy buena idea, pero que muy buena. Siempre he querido realizar un juego de "Zelda a link to the past" y un juego de mascotas virtuales, pero esto los resume a los dos.  XD XD XD

  No cejes en el empeño. Tarde o temprano verás que "Nintendo" te copia la idea y crea uno parecido para celulares, lo que demostará que estabas por buen camino.  8) 

  Me gustaría jugarlo una vez terminado...  :D   
192
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 05, 2012, 11:00:42 PM
  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
193
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 05, 2012, 10:10:02 PM
  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.
194
Preguntas y respuestas / Re:Variables creadas en Script
Octubre 05, 2012, 08:20:06 PM
  Saludos makero Samigabacho:


  Discúlpame por la demora, desde el Lunes te debo los "scripts" arreglados.

  Acá te los paso, estúdialos y luego puedes preguntar lo que no comprendas.  :-[

  Recuerda que en todo el fin de semana no estoy en línea...  :-[
195
Preguntas y respuestas / Re:PROBLEMA CON IA ENEMIGA
Octubre 05, 2012, 08:15:42 PM
  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...