Consulta actor Caja

Consulta chicos, como hago para que una caja quede fija en una posición en pantalla porque siempre que la llamo se cae. Las defino así pero no mantienen la posición.

def crear_cajas(self):
#Cajas Izquierdas con su nueva imagen y pos
caja_campo = pilas.actores.Caja(x=-200,y=-140).definir_imagen(“imagenes/campo.png”)
caja_mar = pilas.actores.Caja(x=-200,y=0).definir_imagen(“imagenes/mar.png”)
caja_montana = pilas.actores.Caja(x=-200,y=140).definir_imagen(“imagenes/montana.png”)
#Cajas Derechas con su nueva imagen y pos
caja_rio = pilas.actores.Caja(x=200,y=-140).definir_imagen(“imagenes/rio.png”)
caja_selva = pilas.actores.Caja(x=200,y=0).definir_imagen(“imagenes/selva.png”)
caja_sabana = pilas.actores.Caja(x=200,y=140).definir_imagen(“imagenes/sabana.png”)

Gracias.

Hola @Ovos, ¿hay alguna razón por la que necesites que sean cajas?.

Tal vez solo estés buscando actores con imágenes personalizadas, ¿puede ser?.

Si es así, alcanzaría con usar el actor Actor:

  def crear_cajas(self):
      actor_campo = pilas.actores.Actor(x=-200,y=-140)
      actor_campo.imagen = "imagenes/campo.png"
      
      actor_mar = pilas.actores.Actor(x=-200,y=0)
      actor_mar.imagen = "imagenes/mar.png"
      
      actor_montana = pilas.actores.Actor(x=-200,y=140)
      actor_montana.imagen = "imagenes/montana.png"
      
      # etc...

Porque después tengo que armar colisiones y pensé que sería más fácil así. Tengo que armar “6 cajas” (caja selva, caja mar, etc) y arrastrar hacia ellas animales que correspondan a cada una . Tengo que armar una lista de animales y ver cómo comparar esa colisión . Bastante complejo.

En principio lo armé así como decís vos, después quise ver si con cajas era mejor pero me parece que lo dejaré como tenia antes. Gracias y si se te ocurre algo para lo que te comenté te agradecería.

Hola @Ovos, es bastante complejo en realidad… se me ocurrió hacerlo creando actores con algunos atributos “inventados” como es_de_mar y es_de_selva (para los actores) y los atributos espera_mar y espera_selva (para las cajas).

Pero aún así me pareció complejo… no se si a los chicos del foro se les ocurrirá una forma mas sencilla, me parece que quedó complicadísimo… ¿cómo lo ves?

# -*- encoding: utf-8 -*-
import pilasengine

pilas = pilasengine.iniciar()


caja_espera_mar = pilas.actores.Actor(x=-200)
caja_espera_mar.imagen = "caja.png" #"data/caja_espera_animales_de_mar.png"
caja_espera_mar.espera_mar = True
caja_espera_mar.espera_selva = False

texto1 = pilas.actores.Texto("Cosas de mar", x=-200)

caja_espera_selva = pilas.actores.Actor(x=200)
caja_espera_selva.imagen = "caja.png"
caja_espera_selva.espera_mar = False
caja_espera_selva.espera_selva = True

texto2 = pilas.actores.Texto("Cosas de selva", x=200)


animal1 = pilas.actores.Actor(y=200)
animal1.imagen = "patito.png"
animal1.es_de_mar = True
animal1.es_de_selva = False
animal1.aprender(pilas.habilidades.Arrastrable)

animal2 = pilas.actores.Actor(y=-200)
animal2.imagen = "mono.png"
animal2.es_de_mar = False
animal2.es_de_selva = True
animal2.aprender(pilas.habilidades.Arrastrable)

def accion_al_colisionar(animal, caja_donde_toca):
    if caja_donde_toca.espera_mar:
        if animal.es_de_mar:
            animal.decir("Excelente")
            animal.eliminar()
        else:
            animal.decir("eh, cualquiera!")
    
    if caja_donde_toca.espera_selva:
        if animal.es_de_selva:
            animal.decir("Excelente")
            animal.eliminar()
        else:
            animal.decir("no, no, aca no...")

animales = [animal1, animal2]
cajas = [caja_espera_mar, caja_espera_selva]
pilas.colisiones.agregar(animales, cajas, accion_al_colisionar)



pilas.ejecutar()
1 Like

Me gusta la idea, debo ver como implementar todo con algún tipo de dato como listas o algo por la cantidad de animales. Pero va por ese lado maso menos.

Gracias, espero que alguno se le ocurra o si me sale algo lo comparto.

Gracias genio.

Comparto como lo realice al finan, agregándole a las cajas una propiedad y a los animales en listas donde el valor 0 es su habitad.

def crear_cajas(self):
	
	#Cajas Izquierdas con su imagen y les defino un nombre para comparar luego
	caja_campo = pilas.actores.Actor("imagenes/campo.png")
	caja_campo.habitad="campo"
	caja_campo.radio_de_colision=40
	caja_mar = pilas.actores.Actor("imagenes/mar.png")
	caja_mar.habitad="mar"
	caja_mar.radio_de_colision=40
	caja_montana = pilas.actores.Actor("imagenes/montana.png")
	caja_montana.habitad="montana"
	caja_montana.radio_de_colision=40
	#Cajas Derechas con imagen y les defino un nombre para comparar luego
	caja_rio = pilas.actores.Actor("imagenes/rio.png")
	caja_rio.habitad="rio"
	caja_rio.radio_de_colision=40
	caja_selva = pilas.actores.Actor("imagenes/selva.png")
	caja_selva.habitad="selva"
	caja_selva.radio_de_colision=40
	caja_sabana = pilas.actores.Actor("imagenes/sabana.png")
	caja_sabana.habitad="sabana"
	caja_sabana.radio_de_colision=40
	#Cajas Izquierdas pos y un tengo en la misma posición para las colisiones
	caja_campo.x=-200
	caja_campo.y=-140		
	caja_mar.x = -200
	caja_mar.y = 0
	caja_montana.x = -200		
	caja_montana.y = 140
	#Cajas Derechas pos
	caja_rio.x = 200
	caja_rio.y = -140
	caja_selva.x = 200
	caja_selva.y = 0
	caja_sabana.x = 200
	caja_sabana.y = 140		
	return [caja_campo,caja_mar,caja_montana,caja_rio,caja_selva,caja_sabana]

subiste todo el codigo a algun lado (git, dropbox, drive, etc)