Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Mis colisiones no van bien, ¿Álguien me ayuda? :(  (Leído 1215 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
en: Abril 28, 2014, 11:51:56 am
Buenas.

Estoy con un pequeño proyectillo y tengo problemas con las colisiones.

son bloques que caen y rebotan en el suelo y entre si, cuando rebotan en el suelo no tengo problemas, cuando rebotan entre si, a veces se quedan parados un momento, uso los eventos de D&D para el tema pero me imagino que debería usar algo como esto:

http://docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_rectangle.html

Pero no me queda claro su uso, ¿Álguien puede ayudarme a entender esta función o indicarme si no es la que debo usar?

¡Saludos!

Visita mi proyecto: Space Cadet
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Aitor_Tarrias

  • Habitual
  • *
  • Puntos: 59
  • Mensajes: 25
    • Ver Perfil
Respuesta #1 en: Abril 28, 2014, 01:06:03 pm
en el objeto bloque tu puedes poner un evento de colision con el mismo objeto. No lo he probado pero yo creo que si te podria servir, y pones que cuando colisione con otro bloque pues que haga lo que desees.

 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
Respuesta #2 en: Abril 28, 2014, 02:24:29 pm
en el objeto bloque tu puedes poner un evento de colision con el mismo objeto. No lo he probado pero yo creo que si te podria servir, y pones que cuando colisione con otro bloque pues que haga lo que desees.

Gracias, de hecho eso es lo que tengo y de hecho de ahí viene el error, pro eso preguntaba por las funciones de colisión, que no las conozco mucho aún :)

¡Saludso!

Visita mi proyecto: Space Cadet
 


Desconectado vampy09

  • Asiduo
  • *
  • Puntos: 289
  • Mensajes: 247
  • Sexo: Masculino
    • Ver Perfil
Respuesta #3 en: Abril 28, 2014, 04:04:34 pm
Pon el código que usas para las colisiones.

The next best thing to knowing something,
is knowing where to find it.
 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
Respuesta #4 en: Abril 28, 2014, 06:28:50 pm
Pon el código que usas para las colisiones.

Lo he hecho todo con el drag&drop porque hasta ahora no me había echo falta codificar las colisiones simples de mi proyecto, pero aquí necesito que sean más precisas para que reboten bien, así que no tengo código :(

Visita mi proyecto: Space Cadet
 


Desconectado penumbra

Respuesta #5 en: Abril 28, 2014, 08:02:11 pm
Mdiante la función collision_rectangle creas una "ventana" (zona) en la habitación basada en las coordenadas de la instancia desde donde se usa. Si al menos un pixel de la máscara del objeto que especificas en la función entra dentro de esa ventana, la función devuelve el id de esa instancia. SI no hay colisión con instancia del objeto especificado, devuelve un número negativo.

Probablemente funcione ya que es la que más se adecua a la forma de un bloque.

 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
Respuesta #6 en: Abril 29, 2014, 06:56:37 am
Mdiante la función collision_rectangle creas una "ventana" (zona) en la habitación basada en las coordenadas de la instancia desde donde se usa. Si al menos un pixel de la máscara del objeto que especificas en la función entra dentro de esa ventana, la función devuelve el id de esa instancia. SI no hay colisión con instancia del objeto especificado, devuelve un número negativo.

Probablemente funcione ya que es la que más se adecua a la forma de un bloque.

Vale, eso lo entiendo, gracias penumbra, lo que no sé hacer ahora es hacer que la variable inst (uso el ejemplo de la ayuda) rebote mediante código.

Esto es lo que tengo en el evento de colisión:

Código: [Seleccionar]
var inst;
 inst = collision_rectangle(x, y, x+ 51, y+ 51, object0, true, true); // <-- X e Y + el tamaño del sprite, esto está bien, no?
 if inst != noone // Si no es nulo
    {
    with (inst) // QUE REBOTE!!
    }

Pero no rebota, hace cosas raras, he probado con

Código: [Seleccionar]
with (inst) move_bounce_all(true);
Pero quizás no es lo correcto porque hace cosas rarísimas XD

Os pongo un vídeo de lo que estoy intentando solucionar en cuestión, ya que quizás haya otra manera, pero como digo, hasta ahora sólo he tocado las colisiones por drag&drop y ando algo perdido:

https://www.dropbox.com/s/6odiu326hgmium6/colisiones.mp4
« última modificación: Abril 29, 2014, 06:59:10 am por _-Caleb-_ »

Visita mi proyecto: Space Cadet
 


Desconectado penumbra

Respuesta #7 en: Abril 29, 2014, 07:34:44 am
Para saber si el rectángulo de colisión este bien definido es necesario saber cómo tienes configurado el origen del sprite. Tal como está, se supone que el origen del sprite está ubicado en la esquina superior izquierda del objeto bloque.

 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
Respuesta #8 en: Abril 29, 2014, 07:36:40 am
Para saber si el rectángulo de colisión este bien definido es necesario saber cómo tienes configurado el origen del sprite. Tal como está, se supone que el origen del sprite está ubicado en la esquina superior izquierda del objeto bloque.

Si, exacto, 0,0 :)

Visita mi proyecto: Space Cadet
 


Desconectado penumbra

Respuesta #9 en: Abril 29, 2014, 07:46:52 am
Bueno, no sé de qué va tu juego, pero esto suena como un trabajo para el sistema de físicas Box2D de GM:S. Deberías hecharle un vistazo al tutorial de shooter que incluye el GM:S, aunque tendrías que reescribir todo desde cero, pues ahí no se pueden usar eventos de colisión, ni vspeed, ni gravity, etc etc.

 


Desconectado _-Caleb-_

  • Asiduo
  • *
  • Puntos: 183
  • Mensajes: 123
    • Ver Perfil
    • Cadetes del Espacio
Respuesta #10 en: Abril 29, 2014, 07:59:13 am
Bueno, no sé de qué va tu juego, pero esto suena como un trabajo para el sistema de físicas Box2D de GM:S. Deberías hecharle un vistazo al tutorial de shooter que incluye el GM:S, aunque tendrías que reescribir todo desde cero, pues ahí no se pueden usar eventos de colisión, ni vspeed, ni gravity, etc etc.

Es lo que se ve en el vídeo, es sólo una prueba de colisiones, gravedades y rebotes, que al final, sacaré, lo estoy haciendo por aprender cosas mientras espero gráficos nuevos para mi proyecto. Le echaré un ojo a eso penumbra, a ver si lo arreglo :)

¡Gracias!

Visita mi proyecto: Space Cadet
 


Desconectado penumbra

Respuesta #11 en: Abril 29, 2014, 08:26:47 am
Ah, no había visto el video. Pensé que los bloques caían a más velocidad, y en línea recta. Más bien casi van flotando y se mueven en diagonal. No sé cómo muevas los bloques, pero yo probaría que cuando haya una colisión contra lo que sea (se puede usar un objeto padre para englobar todos los cuerpos con los que chocar), cambiar la dirección de movimiento (ángulo, o vspeed + hspeed, o +x y +y) dependiendo de la posición de un bloque respecto a otro.