Hola, estoy intentando hacer un juego con vista desde arriba, y no consigo que el personaje se pare al chocar contraa un objeto solido, lo he intentado de varias formas, a ver si le hechais un vistazo al codigo:
Lo he intentando incluso dandole una habilidad de Caja pero no funciona, y en los ejemplos el mono se come la banana pero no sale como hacer una colision “solida” xD, por si acaso os dejo una imagen:
Quiero que el personaje choque contra los arboles, la casa etc. Ademas he intentado usar el Tile map pero no lee las capas bien y no produce colisiones. Muchas gracias.
import pilasengine
pilas = pilasengine.iniciar()
class Corvo(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = "engine/charas/corvo_down0.png"
def frase1(self):
self.decir("Umm... deberia pasarme por la Ciudadela")
def frase2(self):
self.decir("seguro que la feria ha llegado ya")
def actualizar(self):
if pilas.control.izquierda:
self.x -= 3
self.espejado = True
if pilas.control.derecha:
self.x += 3
self.espejado = False
if pilas.control.arriba:
self.y += 3
self.espejado = False
if pilas.control.abajo:
self.y -= 3
self.espejado = True
class Colision(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = "colisiones.png"
casacorvo = pilas.actores.MapaTiled("casaexteriorcorvo.tmx")
corvo = Corvo(pilas)
corvo.x = -25
corvo.y = -20
corvo.frase1()
colision = Colision(pilas)
colision.x = -20
colision.y = -15
colision.aprender(pilas.habilidades.RebotarComoCaja)
pilas.ejecutar()
Hola @TermoRami ; Lo primero que tienes que ver es qué errores produce tu código (si lo ejecutas desde el editor, en la ventana de debajo de la escena debería aparecer). Cuando se produce un error, pilas (y cualquier otra librería) pasa a funcionar incorrectamente.
¿Puedes decirnos qué mensaje de error te sale?
En el código que pasas, tu actor colision podría rebotar como caja con otros actores que también reboten como caja, algo que no es el caso de corvo.
Tuve que cambiar un poco la forma de definir los bloques sólidos, y me parece que quedó
un poco mejor… la idea es que puedas indicar qué bloques van a ser sólidos usando el prefijo
“solido”, así:
(la última versión es la 0.90.27, si ven una anterior pulsen CTRL+F5)
Con respecto a convertir los juegos a .exe, hay otro post en donde habíamos
visto como hacerlos fácil: ¿tal vez podemos hacer un script para simplificarlo no?
Ha sido de utilidad, he logrado avanzar un poco, pero me sigue sin detectar las colisiones y he seguido al dedillo el tutorial nuevo que has hecho, el problema es que en el tutorial funciona siempre y cuando quieras que el actor salte o ruede, pero al quitar esas lineas otra vez vuelve a atravesar las colisiones,puedes ver el codigo y decirme como seria para que el actor no saltase y pudiese colisionar con los elementos? Muchas gracias por lo del script me viene perfecto:
Le agregué un poco mas de código para que se pueda mover tanto para los costados como para arriba y abajo.
Una de las cosas que cambié, es que la figura física sea en realidad quien controla
el movimiento del actor. De esa forma, cada vez que se quiera mover al personaje, en realidad hay que mover la figura física. Solo de esa forma podemos evitar que pase por arriba de las plataformas.
La otra cosa que cambié, es que las figura física se mueva usando velocidades (también pude
haber usado impulsos), porque de esa forma box2d puede hacer correctamente los cálculos de colisiones de forma natural. Se producen efectos muy raros si cambiamos los atributos “x” o “y” directamente, aún no se muy bien cómo resolverlo para que eso se pueda hacer sin que parezca
una “teletransformación” que atraviesa paredes…
Por cierto, vas a notar que el personaje rebota de forma muy rara cuando se lo empuja contra los bordes, voy a investigar alguna forma para evitar esto, usando sensores supongo… lo investigo a ver si puedo.
Muchas gracias, pense que era mas complicado dotar de fisicas al actor, pero por lo que veo es bastante sencillo, el actor se mueve a la perfeccion aunque al principio descendia hacia abajo lentamente pero de forma interrumpida hasta que meti esta linea:
pilas.fisica.definir_gravedad(0, 0)
Es cierto lo del choque ese raro que forma al colisionarse, pero bueno mientras se mueva y responda bien no me importa, muchas gracias.
Creo que he encontrado un error a la hora de encontrar la ruta donde se se guarda el archivo .tmx para MapaTiled, pilas solo encuentra el archivo .tmx si no necesita rutas de directorios para usarse, ejemplo grafico:
Hola, he intentado hacer lo del ejecutador, pero no encuentro en ningun directorio ni nada los archivos run.py, con lo cual no puedo crear el ejecutador, hay otra forma de hacerlo?
Hola @TermoRami, estoy escribiendo un tutorial nuevo para mostrar cómo hacer los ejecutables de pilas para windows… ¿me escribís en otro post separado para que veamos esto en particular?