Ayuda invisibilidad de personaje

buenas noches…tengo la idea de cargar una imagen (actor) y que al finalizar el temporizador la misma se vuelva invisible…la idea es memorizar la posicion de la imagen para que esta desaparezca y seleccionar la imagen donde se recuerda que estaba. al darle la instruccion de actualizar como esta en el codigo mas abajo,la imagen se superpone por una nueva y no se vuelve invisible sino que al contrario,se ve mas definida.
necesito ayuda sobre el efecto de la imagen para que se vuelva invisible al finalizar el tiempo; hacer que el contador de tiempo desaparezca de pantalla al llegar a 0 ; y una idea sobre si tengo que usar colicion en la imagen para poder darle la instruccion de clickearla mientras este invisible.Desde ya gracias.

def actor1():
    actor=pilas.actores.Actor()
    actor.imagen="actores/serpienteverde.jpg" #imagen propia
    actor.escala=0.5
    actor.definir_posicion(150,-130)
    actor.transparencia=40
def tiempo():
    t = pilas.actores.Temporizador() 
    t.ajustar(5, actualizar_primerescena()
    t.texto.x=25
    t.texto.y = 175
    t.texto.escala=1.5
    t.texto.color=pilas.colores.Color(250,250,250)
    t.comenzar()   
    t.terminar()
def primer_escena():
    fondo=pilas.fondos.Fondo()
    fondo.imagen="fondos/selva.jpg"  #fondo propio
    fondo.escala_x=2.5
    fondo.escala_y=2.8
    actor1()
    tiempo()
    
def actualizar_primerescena():
    actor1()
    actor1.transparencia=100
    
primer_escena()

Buenas, @avin !
No sé si comprendo muy bien qué es lo que quieres hacer… :cold_sweat:

Parece ser un juego como de memoria y encontrar parejas ?

Lo del contador que desaparece justo hoy puse un ejemplo en otro post

Lo de clicar un actor es fácil y no tiene ningún problema que tenga la transparencia en 100. Tienes un ejemplo en Pilas, “Juego-con-escenas” (el de disparar a los patitos :slight_smile:)
Yo adapté ese ejemplo en mi primer juego:

#obtenemos las colisiones con el mouse	
		colisiona = self.obtener_actores_en(evento.x, evento.y)
		for actor in colisiona:
			if isinstance(actor, Ovnis_Enemigos):
					if actor.escala >= 0.6:
						actor.dispararconclick()
					else:
						None

Si te fijas al clicar al actor con el mouse se ejecuta un comportamiento previamente programado del actor, en este caso yo programé que el actor recibiera un disparo y perdiera una vida::

def dispararconclick(self):
		#"Se invoca cuando se hace click sobre el ovni."
        self.vida -=1
        if self.vida == 0:
            self.eliminar()
            self.pilas.camara.vibrar(1, 0.3)

Espero que esto te ayude!

Un saludo :wink:

buenas tardes,tengo que hacer un uego sin usar clases, lo que subi es la porcion mas importante del codigo,en laque nesesito que el actor se vuelva completamente invisible y no puedo…tal ves esten mal las instrucciones.
estoy mirando el ejemplo que me proporcionaste para entnder lo que es colision. y tmb lo del contador.

Buenas, @avin !

A versi este ejemplo te sirve para lo que tú querías hacer: :cold_sweat:

import pilasengine

pilas = pilasengine.iniciar()

mono = pilas.actores.Mono()
mono.tiempo_para_hacer_invisible = 5
mono.seleccionable = True

mono2 = pilas.actores.Mono(x = -170)
mono3 = pilas.actores.Mono(x = 170)


contador = pilas.actores.Texto(str (mono.tiempo_para_hacer_invisible))
contador.y = 100
	


def descontar_tiempo():
		
	mono.tiempo_para_hacer_invisible -= 1
        
	if mono.tiempo_para_hacer_invisible > 0:
		contador.texto = str(mono.tiempo_para_hacer_invisible)
									
	if mono.tiempo_para_hacer_invisible == 0:
		
		mono.transparencia = 100
		pilas.avisar('haciendo invisible')
					
		tarea_descontar.eliminar()
					
		mono.tiempo_para_hacer_invisible = 5
					
		contador.eliminar()
					    

# le indicamos a pilas que llame a la funcion cada 1 segundo
tarea_descontar = pilas.tareas.siempre(1, descontar_tiempo) 


def cambiar_transparencia(receptor):
	#receptor.transparencia = 0  #así se vuelve opaco al momento
	receptor.transparencia = [0], 5 #así se vuelve opaco lentamente
	pilas.avisar('haciendo visible')

def cuando_hace_click(evento):
	
	colisiona = pilas.escenas.escena_actual.obtener_actores_en(evento.x, evento.y)
	for actor in colisiona:
		if actor.transparencia == 100 and actor.seleccionable:
		
			cambiar_transparencia(actor)
		
		else:
			None

pilas.eventos.click_de_mouse.conectar(cuando_hace_click)
		
pilas.ejecutar()

Un saludo ! :wink:

Gracias
lo voy a chequear de seguroalgunas instrucciones me serviran ,en caso de no ser subo el codigo completo para mayor entndimiento.

Buenas noches,subo el codigo completo para mas entendimiento y replanteo preguntas. Es un juego de memorizacion en la que para avanzar de escenario hay que encontrar una imagen que se vuelve invisible…

coding: utf-8

import pilasengine
pilas = pilasengine.iniciar()

#creo una ventana con las instruccion del juego
def iniciar_juego():
pilas.escenas.Normal()
fondo=pilas.fondos.Fondo()
fondo.imagen=“fondos/cerebro.jpg”
fondo.escala_x=2.8
fondo.escala_y=2.5
texto=pilas.actores.Texto(" Memoriza la posicion\n de las imagenes")
texto.color=pilas.colores.Color(200,00,00)
t = pilas.actores.Temporizador()
t.ajustar(2, primer_escena)#cambiar tiempo para terminar de leer la instruccion
t.comenzar()
t.texto.transparencia=100
boton_salir()
cursor1()

def salir_del_juego():
print (“hasta pronto”)#editar para antes de cerrar el juego salga este mensaje//sin concluir
pilas.terminar()

def menu():
pilas.escenas.Normal()
pilas.actores.Menu([(‘Empezar a jugar’, iniciar_juego),(‘Salir’, salir_del_juego)]),
fondo=pilas.fondos.Fondo()
fondo.imagen=“fondos/azul.jpg”
fondo.escala_x=1
fondo.escala_y=1
fondo.rotacion=[360],100###darleinstruccion de girar por siempre
texto=pilas.actores.Texto(“UN JUEGO DE\n MEMORIA”)#"\n divide el texto en dos lineas
texto.y=150
texto.escala=2
texto.color=pilas.colores.Color(200,200,200)# seleccionar despues un color
cursor1()

#creo actores y sus copias con mas transparencia para la ilusion de invisibilidad
def actor1():
actor1=pilas.actores.Actor()
actor1.imagen=“actores/serpienteverdei.png”
actor1.escala=0.2
actor1.definir_posicion(220,-130)
actor1.transparencia=40
actor1.radio_de_colision=30

def actor11():
actor11=pilas.actores.Actor()
actor11.imagen=“actores/serpienteverdei.png”
actor11.escala=0.2
actor11.definir_posicion(220,-130)
actor11.transparencia=100
actor11.radio_de_colision=30
#pilas.conectar()
#actor11.conectar(seleccion) conecto con el click del mouse que haga lo que instruyo en la funcion

def actor2():
actor2=pilas.actores.Actor()
actor2.imagen=“actores/loroverdet.png”
actor2.escala=0.1
actor2.definir_posicion(-270,200)
actor2.transparencia=40
actor2.radio_de_colision=25
def actor22():
actor22=pilas.actores.Actor()
actor22.imagen=“actores/loroverdet.png”
actor22.escala=0.1###tengo q repetir la misma imagen pero con mas transparencia
actor22.definir_posicion(-270,200)
actor22.transparencia=100
actor22.radio_de_colision=25
actor22.seleccionable=True #para introducir clik(evento)

def tiempo():
mtiempo= pilas.actores.Texto("Tiempo\nrestante: ")
mtiempo.color=pilas.colores.Color(250,250,250)
mtiempo.escala=1.5
mtiempo.x = -60
mtiempo.y = 200
t = pilas.actores.Temporizador()
t.ajustar(3, actualizar_primerescena)
t.texto.x=25
t.texto.y = 175
t.texto.escala=1.5
t.texto.color=pilas.colores.Color(250,250,250)
t.comenzar()
t.terminar()

def vidas():
puntaje = pilas.actores.Puntaje(color = pilas.colores.blanco)
puntaje.escala=1.5
puntaje.definir(3)
puntaje.x = 240 ##chequear empiece en 3 vidas
puntaje.y = 175##y disminuya

puntaje.reducir(cantidad=1)##reduce,incluir en funcion clikeable

mtiempo= pilas.actores.Texto("vidas: ")
mtiempo.color=pilas.colores.Color(250,250,250)
mtiempo.escala=1.5
mtiempo.x = 180
mtiempo.y = 175

#creo boton para terminar juego
def boton_salir():
bs = pilas.interfaz.Boton(“Salir”)
bs.x = -240
bs.y = -220
texbs = pilas.actores.Texto(“Salir”)
texbs.color = pilas.colores.Color(0, 0, 0)
texbs.escala = 0.5
texbs.x = -240 #retocar
texbs.y = -220
bs.conectar(salir_del_juego)

#defino primer escena
def primer_escena():
pilas.escenas.Normal()
fondo=pilas.fondos.Fondo()####cambia fondo
fondo.imagen=“fondos/selva2.jpg”
fondo.escala_x=0.5
fondo.escala_y=0.8
actor1() #restringir el cursor a la imagen de fondo ya que se sobre sale para arriba
actor2() #o reducir la imagen para restringir el cursor
tiempo()
vidas()
boton_salir()
cursor1()

#defino la actualizacion de escena con la ilusion de invisibilizar personajes
def actualizar_primerescena():
pilas.escenas.Normal()
consigna = pilas.actores.Texto(“encuentra la serpiente”)#reemplazar por pilas .avisar
fondo=pilas.fondos.Fondo()
fondo.imagen=“fondos/selva2.jpg”
fondo.escala_x=0.5
fondo.escala_y=0.8 #de esta manera simula ser la misma
vidas() #escena pero con los actores invisibles(transparencia 100%)
boton_salir()
actor11() #resuelto con actores nuevos con
actor22() #mas transparencia
cursor1()

##defino imagen del cursor

def cursor1():
actor=pilas.actores.Actor()
actor.escala=0.1
actor.imagen=“actores/avecursor3.png”
actor.aprender(“seguiralmouse”)
pilas.ocultar_puntero_del_mouse()

#incompleto
#def seleccion():

mfelicitacion= pilas.actores.Texto(“Genial,la has encontrado”)

menu()

Nesesito que el actor11 al ser clickeado me salte a la siguiente escena,caso contrario(click sobre otra imagen o sobre el fondo) perdiera una vida. Nesesito hacer que en el menu, la imagen rote por siempre.
No puedo usar clases,self,ni global.
Eh intentado de varias maneras hacer “clickeable” el actor11 pero no eh podido,para poder enlazarlo a otra funcion de escenario.

Buenas, @avin.

No entiendo por qué no has usado nada del código que te monté como ejemplo… en él te explicaba como clicar un actor con el mouse y que al hacerlo se ejecutara una def.

def cambiar_transparencia(receptor):
	#receptor.transparencia = 0  #así se vuelve opaco al momento
	receptor.transparencia = [0], 5 #así se vuelve opaco lentamente
	pilas.avisar('haciendo visible')

def cuando_hace_click(evento):
	
	colisiona = pilas.escenas.escena_actual.obtener_actores_en(evento.x, evento.y)
	for actor in colisiona:
		if actor.transparencia == 100 and actor.seleccionable:
		
			cambiar_transparencia(actor)
		
		else:
			None

pilas.eventos.click_de_mouse.conectar(cuando_hace_click)

En vez de “cambiar_transparencia” puedes poner ahí la def que más te guste. Por ejemplo, una para cambiar de escena.

Un saludo.

Una nueva manera de clicar un actor, gracias al aporte de @Miguel_Miloro !

1 Like