Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

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: Ayuda con objeto semisolido que solo tenga colison fuera del el borde inferior  (Leído 350 veces)

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

Desconectado kinjedi

  • Visitante
  • *
  • Puntos: 15
  • Mensajes: 6
    • Ver Perfil
 :)  Hola a todos, como podria hacer que  un obj_semisolido, sea traspasable hasta el borde de este mismo solo por 3 lados y menos por un lado.  Me explico, que cuando el obj_player se desplasa desde arriba hacia abajo o desde la derecha hacia la izquierda o  desde la izquierda hacia la derecha y tiene una colision con el obj_semisolido, que solo se detenga en el borde inferior  del obj_semisolido, borde inferior que aparece de color rojo en el ejemplo que dejo. que solo se detenga  dentro del borde inferior rojo, al final siempre el obj_player terminara ocupado y recorriendo todos los pixeles del obj_semisolido;y entonces si el obj_player se desplasa desde abajo hacia arriba  y tiene una colision con el obj_semisolido este se detendra antes de sobrepasar el borde inferior (linea roja) del obj_semisolido, osea el obj_player siempre se detendra o colisionara con la parte inferior de la linea roja  del obj_semisolido ya sea su desplazamiento de forma horizontal en las 2 direcciones o vertical pero solo desde abajo hacia arriba.

 :) Bueno espero que me ayuden con esto, desde ya gracias por su ayuda makeros. les dejo el ejemplo [/size]  y algunas imagenes

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado penumbra

Pues desde luego que hay varias maneras, pero creo que la más sencilla se te está escapando



Si ese es el sprite del objeto semisolido, lo único que se necesita es ajustar su máscara de colisión para que, en lugar de que la máscara ocupe todo el sprite (sea un cuadrado), sólo cubra la parte roja. Esto haría que los otros tres bordes no contaran al evaluar colisiones, que es lo que entiendo que quieres lograr.

 


Desconectado kinjedi

  • Visitante
  • *
  • Puntos: 15
  • Mensajes: 6
    • Ver Perfil
 :) Hola y bueno gracias por responder penumbra pero creo que me explique mal. En el ejemplo, la colision por la parte inferior  del obj_semisolido es la unica  perfecta, pero cuando el obj_player (verde, cuadrado) esta alineado de forma lateral al obj_semisolido no deberia haber una colision;  Pero si esta desalineado de forma lateral con respecto ala linea roja  (borde inferior) del obj_semisolido, hay si habria una colision.
espero haberme explicado mejor. Bueno vean el ejemplo porfa... gracias. :)

 


Desconectado penumbra

pero cuando el obj_player (verde, cuadrado) esta alineado de forma lateral al obj_semisolido no deberia haber una colision

if (obj_player.y !=  obj_semisolido.y)
{
     //código de colisión
}

Eso haría que no hubiera colisión si están exactamente alineados, si no lo están, se usaría la máscara de colisión "delgada" que había mencionado. En el caso de la colisión perfecta por la parte inferior, las coordenadas Y de cada instancia no estarían alineadas, lo que provocaría la colisión. Si están desalineadas al menos un pixel (vertical), pues también habría colisión.

Si eso no te convence, otro método de hacerlo (usando la máscara cuadrada completa) sería recurrir a las variables bbox_bottom, bbox_top, bbox_right y bbox_left (aunque en GM8,creo que sólo estan disponibles en la versión PRO).
http://www.dazlog.com/manual_GM/Imagenes_y_sprites.htm
« última modificación: Marzo 20, 2015, 08:04:14 pm por penumbra »

 


Desconectado kinjedi

  • Visitante
  • *
  • Puntos: 15
  • Mensajes: 6
    • Ver Perfil
 :) Hola y bueno me tarde en responder x que estaba ocupado, disculpa.
Gracias por la ayuda pero aun no consigo lo que quiero; intente con los codigos estos que me sujeriste:

En el evento colision del  obj_player le puse esto:

if bbox_bottom+1>=other.bbox_bottom+1   
{
y=other.bbox_bottom+1
}


En la ventana del esprite,  le tuve que colocar el Origin y=32 (claro que recordando que el sprite mide 24x32  (Height:32))
(intente con el sprite centrado pero no lo consegui ? x que)

Y entonces la colision que quiero de arriba hacia abajo queda perfecta.  :-[  Aun no se como hacer para la colision de derecha a izquierda y biceversa y tambien no se como hacer para que colisione de abajo hacia arriba como habia dicho anteriormente. 
y bueno alguna otra ayuda o sugerencia, gracias  :-[