px es la coordenada x del jugador en píxeles (cada objeto tiene 16 píxeles). py es la coordenada y del jugador. Los nombres de los objetos se almacenan en d[x][y]. Si los objetos están en segundo plano, d[x][y + "s"] = false . scale es el ancho y la altura de los objetos. La pantalla del juego tiene una escala de 12 de alto y una de 16 de largo. El jugador está en el medio de la pantalla y tiene dos escalas de alto y una escala de alto.
Cuando se ejecuta el código, el jugador debe permanecer por encima de cualquier objeto. sin embargo, en cambio, cae por el suelo hasta que finalmente se detiene por una razón desconocida. Puedo moverme hacia la izquierda y hacia la derecha en este punto, pero si me muevo demasiado en cualquier dirección, comenzaré a caer de nuevo.
function collision() { for (gx = 0; gx < 3; gx++) { for (gy = 0; gy < 4; gy++) { if (d[Math.floor(px / 16 + 7 + gx)] == undefined) { d[Math.floor(px / 16 + 7 + gx)] = {}; } if (d[Math.floor(px / 16 + 7 + gx)][Math.floor(py / 16 + 5 + gy) + "s"] == false && d[Math.floor(px / 16 + 7 + gx)][Math.floor(py / 16 + 5 + gy)] != "none") { var hit = true; } } } if (hit == true) { return true; } else { return false; } var hit = false; } Cada vez que el jugador intenta moverse, este código está en una declaración if para asegurarse de que el jugador pueda hacerlo. Esto incluye la gravedad tirando de los jugadores hacia abajo.
EDITAR:
La razón por la que esto no funciona correctamente es porque, por alguna razón, la detección de colisión permanece en un lugar del mundo en lugar de moverse con el jugador. Esto es extraño, porque px y py funcionan para todos los demás usos, como mover el mundo.