Puedo declarar en un actor una zona de acción?. Por ejemplo quiero definir un objeto ventilador… cuando un actor entra en la zona de viento hacer algo
Sí, el atributo “radio_de_colision” se puede usar para eso:
Por ejemplo, podrías crear el actor ventilador, darle un radio de colisión como estoy
haciendo ahí con el mono. Y luego definir qué quieres que haga por medio de una
función y una colisión:
Claro, pero si mal no tengo entendido, probocaría una realimentación (una recursividad o algo así) y no logro hacer que “influya” levemente
prueben este código a ver si se entiende:
import pilas
pilas.iniciar()
m=pilas.actores.Mono()
m.radio_de_colision=100
p=pilas.actores.Pelota(70,150)
p.aprender(pilas.habilidades.Arrastrable)
m.aprender(pilas.habilidades.Arrastrable )
def zona(mono,pelota):
----pelota.empujar(0.1,0)
pilas.escena_actual().colisiones.agregar(m,p,zona)
pilas.ejecutar()
ahhh… claro, pasa que en realidad la función “zona” se va muchas veces, hasta que el mono y la pelota dejen de estar en contacto…
Si incluís un “print” justo debajo de la linea “pelota.empujar(0.1, 0)” vas a ver
que se llama muchas veces…
Se me ocurre que una forma de evitarlo es tener una variable que inhabilite las colisiones por unos segundos.
Algo así:
puede_colisionar = True
def zona(mono, pelota):
if puede_colisionar:
pelota.empujar(0.1, 0)
puede_colisionar = False
regresar_a_true_luego_de_dos_segundos()
def habilitar_colisiones():
puede_colisionar = True
def regresar_a_true_luego_de_dos_segundos():
pilas.escena_actual().tareas.una_vez(2, habilitar_colisiones)