Octubre 19, 2017, 09:31:22 PM Ultima modificación: Octubre 20, 2017, 12:38:04 AM por nonoroman
Buenas a todos, he estado unos dias de descanso, pero otra vez vuelvo a la mision, jejej.

El caso es que tengo una cuestion simple, pero ahora mismo no doy con la solucion.

El caso es que estoy comprobando la posicion x de un objecto respecto al player, para ser mas concreto el de una puerta.

La idea es que cuando el player este centralizado en la puerta este, entre dentro.

Estoy usando esto en el STEP de la puerta;

if (x == objectPLAYER.x)
        if (bandera)
        {
            alarm[1]=1;
            bandera = false;
        }


El caso es que funcionar, funciona, pero claro, tengo que estar ajustando el player hasta encontrar el pixel exacto del centro de la puerta.

Entonces quiero dar un margen de unos 3 o 4 pixeles entre la izquierda y la derecha del centro de la puerta, para que el player tenga con mas facilidad entrar dentro de esta. Y no tener que buscar el pixel exacto del centro.

Mi pregunta es, como intruduzco este margen de error de 3 o 4 pixeles en la condicion;

if (x == objectPLAYER.x)

Se que es simple, pero ahora mismo estoy atrapado y no se me ocurre.

Bueno, seguro que entre todos damos con la solucion. Saludos a todos!!!!  ;)
PCNONOGames  www.pcnono.es

He probado con if collision_point

Pero me ocurre, lo mismo.

Necesito, que haya una margen de posible colision entre -4 y 4 pixeles de margen.

Bueno si alguien sabe algo que comente please.
PCNONOGames  www.pcnono.es

Prueba de esta forma
[gml]
if( objectPLAYER.x >= x-3 and objectPLAYER.x <= x+3 )
[/gml]

Podrías probar directamente usando un place_meeting en la x y la y del objeto y eligiendo como objeto a comprobar al jugador, lo que comprobará si la mascara de colisión del objeto entra en contacto con la del jugador, así:


if place_meeting(x,y,objectJugador)
{
        if (bandera)
        {
            alarm[1]=1;
            bandera = false;
        }
}


Si no quieres que sea necesario que el jugador entre en contacto con el objeto también podrías usar un collision_rectangle, así:


if collision_rectangle(x-(cantidad de píxeles que quieras hacia la izquierda),y-(cantidad de píxeles que quieras hacia arriba),x+(cantidad de píxeles que quieras hacia la derecha),y+(cantidad de píxeles que quieras hacia abajo),objectPlayer)
{
        if (bandera)
        {
            alarm[1]=1;
            bandera = false;
        }
}


El collision_rectangle va a tomar como punto de inicio al que sumarle o restarle la cantidad de pixeles del rango a las coordenadas del origen del objeto, así que si no están centradas tendrás que controlar bien la distancia a la que quieras que se considere que el jugador colisiona con el objeto.

Espero haberme expresado bien y que te sirva. Suerte!

La verdad es que habia probado con collision_circle

Y funcionaba, pero no iba muy fina, el movimiento era muy artificial.

Pero he probado la condicion que me ha indicado Clamud y el tio lo ha clavado.

Ahora si que funciona tal y como buscaba.

Muchas gracias a todos y sobre todo a clamud que lo ha clavado.

Seguimos trabajando  ;D Muchas Gracias!!!
PCNONOGames  www.pcnono.es