Hola que tal,soy nuevo en pilas y primero queria felicitar a los desarrolladores por hacer este programa tan sencillo de entender y tan completo.
Tengo un pequeño problema con el tema de colisiones e interpolaciones.Para lograr que 1 actor colisione con mi protagonista tuve que hacerlo que imite el comportamiento de un rectangulo pero al hacerlo asi no me permite realizar interpolaciones,para tratar solucionarlo cree otro actor copiando el codigo
“self.figura_de_colision = self.pilas.fisica.Rectangulo(0, 0, 40, 90)” del actor “Auto” y me permite realizar interpolaciones pero no me permite colisionarlo.
Si podrian darme una mano seria de mucha ayuda ya que es para un trabajo de la universidad.
Muchas gracias
Hola @DarioStrk, es una buena pregunta, creo que en algún momento escribimos una respuesta relacionada con este tema, pero no pude encontrarla
La idea es así, en el momento que asigamos una figura física a un actor, y la figura no es un sensor, el actor comenzará a moverse de acuerdo a lo que la figura le diga… es como si la figura física tuviera el control completo de movimiento y rotación del actor. Así que no se puede modificar directamente.
Lo que sí se puede hacer, es mover al personaje indirectamente. Por ejemplo, podrías mover la figura y que el actor la siga.
Mirá un ejemplo, si tomo un actor como el mono y luego le asigno una figura circular, la única forma de moverlo es usando los atributos mono.figura.x
, mono.figura.y
o mono.figura.impulsar
» mono = pilas.actores.Mono()
» mono.aprender('rebotarComoPelota')
» mono.figura.y = 0
» mono.figura.y = 0
» mono.figura.impulsar(100, -100)
» mono.figura.velocidad_x = 0
Estas características se cuentan un poco mejor en el manual, sobre-todo en la sección física personalizada:
Hola mira,estoy necesitando hacer que mis actores sigan un “patron” por asi decirlo de movimiento (osea es un juego de autos y tendrian que simular transito) y cuando intente “figura.impulsar” el actor sale volando para arriba y con “figura.x” no me deja usar listas se puede corregir esto? si queres te puedo copiar las definiciones de mis actores a lo mejor podes entenderme mejor si es que no me explico bien
Hola @DarioStrk, si, si podés enviame un detalle. ¿la idea sería que el auto se mueva solo?, siguiendo un recorrido, tipo calle no ?
Exacto,mira te paso una imagen del juego y las definiciones de mis actores y las funciones de colision
class Chano(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = "Autorojo.png"
self.aprender('moversecomocoche')
self.figura_de_colision = self.pilas.fisica.Rectangulo(0, 0, 40, 90)
self.z = -10
def actualizar(self):
pass
def obtener_velocidad(self):
habilidad = self.obtener_habilidad('moversecomocoche')
return habilidad.velocidad
class Auto_movil(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = "Autorojo.png"
self.figura_de_colision = self.pilas.fisica.Rectangulo(0, 0, 40, 90)
self.z = -10
def actualizar(self):
pass
class Auto_estatico(pilasengine.actores.Actor):
def iniciar(self):
self.imagen = "Autorojo.png"
self.z = -10
rectangulo= pilas.fisica.Rectangulo(0, 0, 80, 180)
self.aprender(pilas.habilidades.Imitar, rectangulo)
def actualizar(self):
pass
pilas.colisiones.agregar('Chano', 'Auto_estatico', aumentar_puntaje)
Al no tener asignada gravedad cuando uso actor.empujar el actor sale volando y si la idea seria que los actores simulen un trafico por las sendas para poder colicionarlo(por las dudas el nombre del juego es “El Juego de Chano” )
Me falta unicamente eso para terminar el juego,help! jaja
Hola @DarioStrk !!!, tal vez lo más sencillo sea eliminar el auto luego de unos segundos, o que desaparezca con transparencia, ¿no?
Fijate que dentro de la función que chequea la colisión podrías crear un efecto de golpe, reproducir un sonido y luego llamar a una tarea para eliminar el coche luego de unos segundos:
El problema es que no puedo crear un actor que sea movible y pueda colisionar con el primer actor al mismo tiempo y me estoy quedando sin tiempo
Hola @DarioStrk, recién armé un ejemplo para mostrar cómo controlar a los actores con física:
Avisanos si te sirve de ejemplo para lo que estás buscando.