Pilas.camara.vibrar() arrastra la cámara a las coordenadas (0,0) [Solucionado]

buenas tardes

tengo dos problemas

al usar la función “pilas.camara.vibrar()” modirica el x y la y de la cámara por floats y arrastra la cámara a la coordenada (0,0)

cámara antes de vibrar
(0,0)

camara después de vibrar
(1.00000008274e-09, 1.00000008274e-09)

ademas de estos problemas

cuando creo un menu no me lo crea con los colores que yo quiero

          marronClaro = pilas.colores.Color(128, 84, 66)
          marronOscuro = pilas.colores.Color(77, 38, 22)
          opciones = [('Jugar', self.jugar),
                              (u"Desafíos", self.desafios),
                              (u"Conectarse a un servidor", self.conectarse),
                              (u"Establecerse como servidor", self.levantarServidor),
                              (u"Modos de juego", self.modoJuego),
                              (u"Creditos", self.creditos),
                              ('Salir', self.salir)]
          self.menu = Menu(pilas, y = 100 , opciones = opciones, fuente= "datos/tipografia/anirb___.ttf", 
          color_normal=marronOscuro,color_resaltado=marronClaro)

(perdón por la calidad de la imagen tuve que bajarle la resolución para que me deje subirla)

Buenas, @Miguel_Miloro !

Para poner color al menú yo lo haría así:

# coding: utf-8
import pilasengine

pilas = pilasengine.iniciar()

mono = pilas.actores.Mono()
mono.y=[100],1

marronClaro = pilas.colores.Color(128, 84, 66)
marronOscuro = pilas.colores.Color(77, 38, 22)

def entrar():
	pilas.avisar('has clicado entrar')
def salir():
	pilas.avisar('has clicado salir')

Mi_Menu = pilas.actores.Menu(
			[
				(u'IR  AL JUEGO', entrar),
				(u'SALIR DE PILAS', salir)
				
			])
			
Mi_Menu.color_normal = marronOscuro
Mi_Menu.color_resaltado = marronClaro
Mi_Menu.fuente= None

def monoDecirHay():
    mono.decir("hay")

mono.set_cuando_hace_click(monoDecirHay)

pilas.ejecutar() 

En cuanto al tema de la cámara, se me ocurre crear una tarea en la que al cabo de unos segundos de hacer vibrar la cámara defina su posición de nuevo a (0,0)

def centrar_camara():
	pilas.camara.x = 0
	pilas.camara.y = 0
	print("nueva pos x: " +str(pilas.camara.x))
	print("nueva pos y: "+str(pilas.camara.y))

def entrar():
	pilas.avisar('has clicado entrar')
	print(pilas.camara.x)
	print(pilas.camara.y)
	pilas.camara.vibrar()
	print(pilas.camara.x)
	print(pilas.camara.y)
	pilas.tareas.una_vez(2, centrar_camara)
	
def salir():
	pilas.avisar('has clicado salir')

Un saludo! :wink:

1 Like

Muchas gracias

Con lo del menú, al intentar lo que me dijiste me di cuenta que le estaba cambiando el color abajo por negro :expressionless:

Con la tarea es una buena solución pero cada tanto sigue fallando (específicamente cuando intentas hacer un movimiento antes de que la tarea se ejecute), lo que se me ocurrió para solucionarlo es usar la función int() en los valores que usaban las coordenadas de la cámara.

Aunque otro problema que tenia con la función vibrar() fue que cuando movía la cámara (por ejemplo a la coordenada (346,785)) y al llamar a la función, esta mueve la cámara a la coordenada (0,0) y vibra, lo que me gustaría es que la cámara vibre en la coordenada donde fue llamada

Buenas, @Miguel_Miloro !

Creo que he podido adaptar el código de pilas para hacerte una def “mi_vibrar”, adaptada de la original.
En mis pruebas funciona bien.

En vez de llamar a pilas.camara.vibrar, puedes llamar a esta función y conseguir el mismo efecto pero sin que te cambie la cámara sus corrdenadas x y.

Verás que lo he construido en una class escena… era simplemente para aprovechar la def actualizar y ver donde se colocaba en cada momento la cámara. Seguro que (si es que lo necesitas) lo podrás adaptar a un juego sin escenas.

Un saludo! :wink:

# coding: utf-8
import pilasengine
import random

pilas = pilasengine.iniciar()

class EscenaPrueba(pilasengine.escenas.Escena):
    def iniciar(self):
        mono = pilas.actores.Mono()
        tarea_vibrar = pilas.tareas.siempre(2,self.mi_vibrar)
        pilas.camara.x=200

    def mi_vibrar(self, intensidad=1, tiempo=0.5):
            valores_x = [x*intensidad for x in [pilas.camara.x -4, pilas.camara.x -3, pilas.camara.x -2, pilas.camara.x +2, pilas.camara.x +3, pilas.camara.x +4] * int(tiempo + 1)]
            cantidad_de_valores_x = float(len(valores_x)) + 1

            valores_y = [y*intensidad for y in [pilas.camara.y -4, pilas.camara.y -3, pilas.camara.y -2, pilas.camara.y +2, pilas.camara.y +3, pilas.camara.y +4] * int(tiempo + 1)]
            cantidad_de_valores_y = float(len(valores_y)) + 1

            pos_actual_x = pilas.camara.x
            pos_actual_y = pilas.camara.y

            random.shuffle(valores_x)
            pilas.camara.x = valores_x + [pos_actual_x], tiempo/cantidad_de_valores_x

            random.shuffle(valores_y)
            pilas.camara.y = valores_y + [pos_actual_y], tiempo/cantidad_de_valores_y

    def actualizar(self):
        #print(pilas.camara.x)
        pass

pilas.escenas.vincular(EscenaPrueba)
pilas.escenas.EscenaPrueba()

pilas.ejecutar()

PD: Solo viendo el menú se me hace que tu juego debe ser buenísimo… Nos podrías explicar algo más de como lo tienes proyectado??? :blush:

Muchas gracias!!!
Ya lo estoy agregando

Este juego nació como un proyecto de la facultad y actualmente estamos trabajando mi amigo y yo.
En síntesis el juego es una plataforma de juegos de mesa para PC, orientado principalmente al ajedrez y juegos de estrategia derivados.
Actualmente todavía no tiene funcionalidad las opciones “Conectarse a un servidor” y “Establecerse como servidor” pero estamos investigando eso.

Cuando veamos que el juego este un poco mas avanzado lo compartiremos en el foro