Registrarse

Colisiones NPC - Pj

Estado
Cerrado para nuevas respuestas.
Buenas, no se si este post debería ir aquí, pero no he encontrado otro lugar mejor. Os explico, estoy desarrollando un juego de pokemon en Love 2d (lua) y estoy en una encrucijada con el tema de las colisiones de NPC's con el jugador, se que whack a hack no se especializa en este tipo de juegos de pokemon, pero estoy algo encallado.

Si alguien tuviese alguna información de que lógica usan las ROM de pokemon para hacer esto, sería de gran ayuda, o un tutorial acerca de NPC collision tile-based map, o alguna idea que se os ocurra, sería de gran ayuda.

Un saludo!!
 

Xabier2012

Usuario mítico
No creo que nadie aquí pueda responderte porque no creo que alguien utilice ese programa. Pero lo de las colisiones deberías buscarlo en la wiki aquí
 
Pokemon es tile-based map, no phisics-based map, es decir, se mueve a casillas, no a causa de la física, como la gravedad, como pasa en super mario amigo..
 

Xabier2012

Usuario mítico
En unity por ejemplo, tú le puedes poner a un sprite o a cualquier objeto un cuadro de colisión, y se puede activar un script si el player cocha contra él. Entonces en unity habría que hacer un script donde no te permita avanzar.

Esto es un ejemplo de como se haría en unity, lo que pasa es que como no conozco tu engine pues no te puedo decir con exactitud lo que tienes que hacer.
 

Cheve

MoonLover~
Miembro de honor
Los juegos de pokémon originales, tienen un Block Layer, (Capa de bloques) que dice la altura del Minisprite (NPC) en cuestión. También tienen un byte que dice si bloquea o no al jugador (Lo pasa por arriba o debajo).

No sé como funciona esa plataforma (es la primer vez que la escucho en años) pero puedes poner una flag (boolean) que controle si activar o no la Hit-Box (El pasar o no pasar), por defecto que no pase. Y lo de la altura lo manejas con una variable.

Es todo lo que te puedo decir por ahora, luego a lo mejo le hecho un vistazo a la plataforma en la que estás desarrollando.
 
Nunca he utilizado Love 2D pero se me ocurre que podrías comprobar las colisiones según el movimiento que quieras realizar. Es decir, que si presionas el botón izquierda que compruebe la casilla que está a la izquierda y si está libre avance, en caso contrario que no haga nada. Esto podrías hacerlo asociando una matriz a la escena de juego:

1111111
1000001
1032401
1000001
1111111

En este caso el 2 sería el personaje "jugable". Los 1 serían paredes que no puedes atravesar y después el 3 un personaje que no te deje pasar y el 4 algo "atravesable" como una flor en el suelo o algo así (aunque a no ser que quieras que el personaje interactúe con ese algo casi que ni te hace falta ponerlo).
De esta forma te podrías mover arriba, abajo y a la derecha, pero no a la izquierda ya que te toparías con ese molesto 3 que no te deja pasar.

Espero que te sea de ayuda.
Un saludo Joseka.
 
Gracias por todos los comentarios, sois muy amables por aportar ayuda. Siento haber tardado en contestar, pero me ha pillado un gripazo de los gordos.

A ver, os cuento, yo también tuve la idea del block layer, hice una tabla bidimensional (matriz bidimensional, exactamente igual que la que puso joseka) de colisiones para que el jugador no pudiese travesar los NPC's. Esto funciona, pero solo en los casos en los que el NPC es estático (entrenadores que miran a los lados, por ejemplo) pero para los dinámicos, esto no funciona. Los bugs de NPC dinámico normalmente derivan a errores en el movimiento del jugador, lo que yo llamo el bug de fuera de la casilla (el personaje deja de moverse a "cuadrados", por lo cual podemos decir que es un bug tremendo.)

Creo que el fallo está al no considerar el tiempo real, es decir, el jugador se mueve libremente a cuadros, y el NPC tiene un recorrido marcado, lo cual suscita múltiples casos de colisiones diferentes. Por lo que deduzco que debe haber algún algoritmo específico para hacer la trayectoria de bloqueo correcta. Si alguien descubre algo, que contacte conmigo o que deje un comentario aquí. Estoy algo atascado con este tema.

Un saludo a todos!!
 
Estado
Cerrado para nuevas respuestas.
Arriba