Estoy haciendo un juego de Lolo, el clásico de NES. Pude hacer que empuje las cajas correctamente, mi personaje se mueve bien, pero el problema es que mi personaje empuja las cajas aún estando en la mitad de la caja. Es decir, el sprite de mi personaje es de 16x16 al igual que la caja. Los objetos se mueven en un 8x8. Quisiera que solo empuje la caja cuando mi personaje y la caja cuando ambos esten en una posición 16x16. Abajo lo explico mejor con imagenes lo que quiero hacer. Probablemente alguien que conozca este juego y sus patrones de movimientos me va a entender.



Acá les dejo mi código.

En el personaje:

Al presionar la tecla izquierda tengo:

if (place_snapped(16,16))
motion_set(180,2);


Al presionar la tecla derecha tengo:

if (place_snapped(16,16))
motion_set(0,2);


Al presionar para arriba:

if (place_snapped(16,16))
motion_set(90,2);


Al presionar para abajo:


motion_set(270,2);



En la caja:

Colision con Lolo:

if (place_free(x+1*other.hspeed,y+1*other.vspeed))
x=x+1*other.hspeed;
y=y+1*other.vspeed;



Cada día que pasa estoy mas enamorado de Holly Earl.

#1 Octubre 06, 2015, 11:38:15 PM Ultima modificación: Octubre 06, 2015, 11:42:22 PM por penumbra
Suponiendo que tienes bien alineados tus objetos a la rejilla/cuadrícula, entonces se puede preguntar (en el evento de colisión de la caja)

"si la coordenada x de lolo coincide con la coordenada x de la caja (están alineados verticalmente), empujar/mover la caja."

"si la coordenada y de lolo coincide con la coordenada y de la caja (están alineados horizontalmente), empujar/mover la caja."

O creo que también: "Si place_snapped() en lolo y place_snapped() en la caja, entonces mover", pero para facilitar las cosas la rejilla de lolo y de la caja debería ser de la misma medida.