Consulta y posible bug.

Si tienes alguna duda sobre cómo usar pilas, o tienes problemas para instalar o hacer algo en pilas comentalo aquí.

Consulta y posible bug.

Notapor DarkDemi » Sab Jun 16, 2012 1:18 am

Hola
Que tal? Mucho gusto. Mi nombre es Damián. Este es mi primer lenguaje Python2, luego de averiguar mucho por la web y decidirme a que aprender opte por python. Entre otros tantos lenguajes, y me convenci a mi mismo que la mejor forma de avanzar más rapido es con la practica y teoria en conjunto. Así que, ¿Qué mejor practica que el desarrollo de un juego?. Luego de buscar un poco, entendi lo de librerias y otras cosas, de ayudas externas para adelantar el trabajo y di con este engine. Pilas realmente me resulta algo confuso ya que todavia no tengo grandes conocimientos del lenguaje base, pero creo que lo lograre dominar. Por ahora vengo a consultar y preguntar por un posible bug. Este es el codigo que llevo escribiendo:
#Importacion e inicializacion de motor.
import shelve
import pilas
from pilas.escenas import Normal

pilas.iniciar() #Funcion de inicializacion, con parametros. Faltan argumentos colocar.
#Variables externas e internas.
#Funciones
#Funciones y clases del menu de intro.
class iniciar(Normal):
def __init__(self):
Normal.__init__(self)
fondo = pilas.actores.Actor(pilas.imagenes.cargar("Recursos/Imagenes/Productor.jpg"))
pilas.eventos.pulsa_tecla.conectar(self.cuando_pulsa_tecla)
fondo.transparencia = [90], 10
def cuando_pulsa_tecla(self, evento):
if evento.codigo == "q" or "w" or "e" or "r" or "t" or "y" or "u" or "i" or "o" or "p" or "a" or "s" or "d" or "f" or "g" or "h" or "j" or "k" or "l" or "z" or "x" or "c" or "v" or "b" or "n" or "m" or 4 or 3 or 5 or 2 or 1 or 6 or "F1" or "F2" or "F3" or "F4" or "F5" or "F6" or "F7" or "F8" or "F9" or "F10" or "F11" or "F12":
warsong_logo_menu()
class warsong_logo_menu(Normal):
def __init__(self):
Normal.__init__(self)
fondo = pilas.actores.Actor(pilas.imagenes.cargar("Recursos/Imagenes/Logo.jpg"))
pilas.eventos.pulsa_tecla.conectar(self.cuando_pulsa_tecla)
fondo.transparencia = [90], 10
def cuando_pulsa_tecla(self, evento):
if evento.codigo == "q" or "w" or "e" or "r" or "t" or "y" or "u" or "i" or "o" or "p" or "a" or "s" or "d" or "f" or "g" or "h" or "j" or "k" or "l" or "z" or "x" or "c" or "v" or "b" or "n" or "m" or 1 or 2 or 3 or 4 or 5 or 6 or "F1" or "F2" or "F3" or "F4" or "F5" or "F6" or "F7" or "F8" or "F9" or "F10" or "F11" or "F12":
menu_juego()
def menu_juego():
fondo = pilas.actores.Actor(pilas.imagenes.cargar("Recursos/Imagenes/Fondo_Menu.jpg"))
fondo.transparencia = 100
fondo.transparencia = [0], 5
def selecciona_iniciar():
pilas.actores.utils.destruir_a_todos()
dificultades()
def selecciona_continuar():
if shelve.open("Data.dat")["guardado"] == "1":
pass
elif shelve.open("Data.dat")["guardado"] == "0":
pilas.avisar("No hay ninguna partida guardada.")
def selecciona_creditos():
creditos = pilas.actores.Texto("Creador General: DarkDemi\n\n\n\n\nRecursos: La web en general.\n\n\n\n\nEngine: Pilas Engine\n\n\n\n\nLenguaje: Python2", y=-100)
creditos.y = [1000], 20
menu.x = [-500, menu.x], 20
def selecciona_salir():
pilas.terminar()
opciones = [
('Iniciar', selecciona_iniciar),
('Continuar', selecciona_continuar),
('Creditos', selecciona_creditos),
('Salir', selecciona_salir)]
menu = pilas.actores.Menu(opciones)
menu.transparencia = 100
menu.transparencia = [0], 10
class dificultades(Normal):
def __init__(self):
Normal.__init__(self)
fondo = pilas.actores.Actor(pilas.imagenes.cargar("Recursos/Imagenes/Fondo_Menu.jpg"))
if shelve.open("Data.dat")["dificultad"] == "1":
opciones = [
('Facil', self.facil)]
self.menu = pilas.actores.Menu(opciones)
self.menu.transparencia = 100
self.menu.transparencia = [0], 10
if shelve.open("Data.dat")["dificultad"] == "2":
opciones = [
('Facil', self.facil),
('Medio', self.medio),]
self.menu = pilas.actores.Menu(opciones)
self.menu.transparencia = 100
self.menu.transparencia = [0], 10
if shelve.open("Data.dat")["dificultad"] == "3":
opciones = [
('Facil', self.facil),
('Medio', self.medio),
('Dificil', self.dificil)]
self.menu = pilas.actores.Menu(opciones)
self.menu.transparencia = 100
self.menu.transparencia = [0], 10
def facil(self):
#pilas.actores.utils.destruir_a_todos()
capitulo1()
print "Enter logrado"
def medio(self):
pass
def dificil(self):
pass
#Funciones de juego.
def capitulo1():
fondo = pilas.actores.Actor(pilas.imagenes.cargar("Recursos/Transcisiones/1.jpg"))
fondo.transparencia = [100], 2
if fondo.transparencia == 0:
fondo = pilas.actores.Actor(pilas.imagenes.cargar("Recursos/Imagenes/Preludio.png"))
fondo.transparencia = 100
fondo.transparencia = [0], 10


iniciar()
pilas.ejecutar()

Mi sintaxis es la de un principiante como notaran, me guio como puedo, así que tal vez se les haga un poco confuso, pero eso fue lo que me atrajo a este lenguaje por que mi propia confusión igual es legible gracias a lo limpio de python.
Van a necesitar tambien el desarrollo del "Data.dat" de hay que es lo que uso como base de datos.
import shelve  

shelve.open("Data.dat")["dificultad"] = "1"
shelve.open("Data.dat")["guardado"] = "0"

print shelve.open("Data.dat")["dificultad"]
print shelve.open("Data.dat")["guardado"]

shelve.open("Data.dat").close()

Esto es todo lo que he hecho, ahora a lo siguiente.
Lo que se supone que hace, aparece una imagen al principio que se desvanece (cambia su transparencia) con la idea de simular una difucion, y luego al apretar una tecla se proxiga a la siguiente imagen. Aqui el primer inconveniente, use un If un tanto largo para añadir la mayor cantidad de teclas posibles, si hubiera alguna forma más simple de indicar "cualquier tecla", pido ayuda en eso (y tambien al hacer click con el mouse si es posible). Luego tambien quisiera saber si es posible que por ejemplo la imagen que mencionamos, guardada como fondo, al llegar al valor de transparencia 90 en este caso, se proxiga a pasar a la otra imagen. Lo he intantado con If's en esa condicion basicamente if fondo.trasparencia == 90: y luego el pedasito de codigo para pasar a la otra imagen pero no logro que lo haga, espero que se entienda lo que intento decir (ya que la imagen al llegar a transparencia 90, se queda quieta y necesita presionar alguna tecla para proseguir).
Luego el programa sigue con la siguiente imagen(suponiendo que presionamos algunas de las teclas del if exagerado) que seria una repeticion en cuanto a codigo de la primera imagen, pero que se junta la difucion con la 3ra imagen de fondo que seria el fondo del menu. Ahora una parte importante aqui, el menu me anda excelente así como esta el codigo puesto, pero solo con el mouse, en cuanto uso el teclado y "enter", se quedan las letras por ejemplo en creditos, se saltea un menu en iniciar, no se seleccionan bien en cuanto al movimiento de las flechitas de abajo a arriba. Supongo yo que es un bug, por que con el mouse reitero anda bien. Pero si de la segunda imagen presionan directamente enter, se saltea el primer menu y el segundo, parte directamente desde la funcion llamada capitulo1. Cosa que con el mouse no lo hace, va todo acorde al plan.
Si me recomiendan algunas mejoras para mi sintaxis tambien se los agradeceria, así voy mejorando. Soy nuevo pero con cada duda que me surga me tendran aquí para preguntarles. Gracias de antemano.
DarkDemi
 
Mensajes: 2
Registrado: Sab Jun 16, 2012 12:54 am

Re: Consulta y posible bug.

Notapor kiketom » Sab Jun 16, 2012 6:14 pm

Ahora no tengo mucho tiempo, pero te comento una cosa:

def cuando_pulsa_tecla(self, evento):
if evento.codigo == "q" or "w" or "e" or "r" or "t" or "y" or "u" or "i" or "o" or "p" or "a" or "s" or "d" or "f" or "g" or "h" or "j" or "k" or "l" or "z" or "x" or "c" or "v" or "b" or "n" or "m" or 4 or 3 or 5 or 2 or 1 or 6 or "F1" or "F2" or "F3" or "F4" or "F5" or "F6" or "F7" or "F8" or "F9" or "F10" or "F11" or "F12":
warsong_logo_menu()


Por lo que veo te interesa ejecutar el método cuando pulsen cualquier tecla. Así que simplifica y pon:

def cuando_pulsa_tecla(self, evento):
warsong_logo_menu()


Si puedo luego lo sigo mirando y te digo cosas ;)
Avatar de Usuario
kiketom
 
Mensajes: 82
Registrado: Lun Ene 03, 2011 3:01 pm
Ubicación: Valencia, España

Re: Consulta y posible bug.

Notapor hugoruscitti » Dom Jun 17, 2012 3:09 pm

Hola DarkDemi!!!

Es cierto lo que comenta kiketom, podría quedar mucho mas compacto
si el método "pulsa_tecla" reacciona a cualquier tecla sin evaluar
cual.

Otra cosa que vi, es que gran parte del código son transiciones, cómo
si fueras de una imagen a otra, haciendo una presentacion.

En estos casos, es bueno tener un contador de tiempo, algo que te
permita saber con exactitud hace cuantos segundos está activa una
escena. Así podrías tener una variable de referencia para las
animaciones.

Por ejemplo, esta es una escena que tiene un contactor de tiempo en
segundos:


import pilas
pilas.iniciar()


class Contador(pilas.escenas.Normal):
def __init__(self):
pilas.escenas.Normal.__init__(self)
self.tick = 0
self.texto = pilas.actores.Texto("", x=-100)
self.texto.color = pilas.colores.negro
pilas.eventos.actualizar.conectar(self.cuando_actualiza)

def cuando_actualiza(self, evento):
self.tick += 1
self.texto.texto = "ticks: %d (son %d segundos)" %(self.tick, self.tick / 60)

Contador()
pilas.ejecutar()


El actor Texto está solamente para mostrarnos el valor
de la variable. Pero es innecesario, lo importante esa
variable "tick", que se incrementa 60 veces por segundo.

Así se tendría que ver el ejemplo en pantalla:

Imagen

Saludos!!!
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina

Re: Consulta y posible bug.

Notapor DarkDemi » Mar Jun 19, 2012 4:17 pm

Muchas gracias por las respuestas, intentare hacer eso que dijieron y luego editare con los resultados... :D
DarkDemi
 
Mensajes: 2
Registrado: Sab Jun 16, 2012 12:54 am


Volver a Consultas, problemas o bugs.

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados