Estoy construyendo un juego simple de Plattformer Jump n 'Run Style. No uso fichas, en cambio tengo formas geométricas para mis entidades de nivel (y el jugador también es uno). Terminé mi código de detección de colisión y todo funciona bien hasta ahora.
Luego, quería implementar el salto. Simplemente verificando si el jugador presiona la tecla apropiada y agrega algo de velocidad hacia arriba. Funciona bien. Pero funciona incluso si el jugador está en el aire, que no es lo que quiero. ;-)
Entonces, tengo que verificar si el jugador se para sobre algo. Mi primera idea fue verificar si hubo una colisión en el último cuadro y marcar al jugador como "capaz de saltar", pero esto incluso se dispararía si el jugador golpea una pared en el aire. Como mis habilidades matemáticas no son tan buenas, pido ayuda, incluso las sugerencias harían cómo implementar esto.
¡Gracias!
Seguramente debería implementar algún tipo de tipo de superficie. Piénselo, ¿cómo se las arreglará si puede subir una escalera si no puede saber si su personaje simplemente chocó una pared o una escalera? Simplemente puede usar OOP para administrar una jerarquía de tipos usando herencia, pero le sugiero que use "categorías" implementadas usando un tipo enumerado:
Aquí está la idea: una enumeración de "Colisiones" tiene una bandera para cada categoría. Por ejemplo:
Con este método, podrá probar si el jugador colisionó con algo que debería manejar, por lo que su motor puede llamar un método "colisionado" de la entidad:
El método utiliza indicadores a nivel de bits y el operador "O" a nivel de bits para garantizar que cada grupo tenga un valor diferente, en función del valor binario de la categoría. Este método funciona bien y es fácilmente escalable para que pueda crear grupos de colisión personalizados. Cada entidad (jugador, enemigo, etc.) en su juego tiene algunos bits llamados "filtro", que se utilizan para determinar con qué puede colisionar. Su código de colisión debe verificar para ver si los bits coinciden y reaccionar en consecuencia, con algún código que podría verse así:
fuente
Si consideras que el pie de tu personaje está siempre debajo del personaje por una cierta distancia, y si no te alejas de la superficie, entonces tu personaje está en el suelo.
En pseudocódigo aproximado:
fuente
char
, ni siquiera en pseudocódigo.