:) 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
Pues desde luego que hay varias maneras, pero creo que la más sencilla se te está escapando
(http://sia1.subirimagenes.net/img/2015/03/19/15031909312593472.png)
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.
:) 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. :)
Cita de: kinjedi en Marzo 20, 2015, 07:08:57 PM
pero cuando el obj_player (verde, cuadrado) esta alineado de forma lateral al obj_semisolido no deberia haber una colision
[gml]
if (obj_player.y != obj_semisolido.y)
{
//código de colisión
}[/gml]
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 (http://www.dazlog.com/manual_GM/Imagenes_y_sprites.htm)
:) 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 :-[