Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Limits on creating Menus #14

Closed
AlvaroN1997 opened this issue Jul 12, 2018 · 6 comments
Closed

Limits on creating Menus #14

AlvaroN1997 opened this issue Jul 12, 2018 · 6 comments
Labels

Comments

@AlvaroN1997
Copy link

AlvaroN1997 commented Jul 12, 2018

[EN]
I have this trouble on creating a big ammount of menus, the problem is when i get inside the "configurator menu", the screen looks like freezed but it stills working but badly, ill show the the code. Thanks.
[ES]
Tengo este problema que cuando creo una cierta cantidad de menus extras o como el código mostrado "menu configurador" muestra errores, al momento de abrir el menu de "configurador" todo funciona bien, pero al abrir otro menu como "Editar Skins" no funciona y se "Congela", no muestra las opciones dadas. Muchas gracias.

class GameMenu():
	def menu_del_juego(self):		

		#MENU JUGAR
		self.menu_jugar = pygameMenu.Menu(ventana,
										bgfun=background,
										color_selected=color_blanco,
										font=pygameMenu.fonts.FONT_BEBAS,
										font_color=color_negro,
										font_size=30,
										menu_alpha=0,
										menu_height=int(tamaño_del_menu[1]),
										menu_width=int(tamaño_del_menu[0]),
										onclose=PYGAME_MENU_DISABLE_CLOSE,
										option_shadow=False,
										title='Menu Principal',
										window_height=tamaño_del_menu[1],
										window_width=tamaño_del_menu[0]
										)

		self.menu_jugar.add_option('Empezar!', funcion_skin, SKIN)
		self.menu_jugar.add_selector('Escoger Skin', [('Default-Easy', 'DEFAULT-EASY'),
													 ('Goku-Easy', 'GOKU-EASY'),
													 ('Hulk-Easy', 'HULK-EASY'),

													 ('Default-Medium', 'DEFAULT-MEDIUM'),
													 ('Goku-Medium', 'GOKU-MEDIUM'),
													 ('Hulk-Medium', 'HULK-MEDIUM'),

													 ('Default-Hard', 'DEFAULT-HARD'),
													 ('Goku-Hard', 'GOKU-HARD'),
													 ('Hulk-Hard', 'HULK-HARD'),],
								onreturn = False,
								onchange = cambiar_skin)
		self.menu_jugar.add_option('REGRESAR AL MENU PRINCIPAL', PYGAME_MENU_BACK)

		

		# MENU SOBRE NOSOTROS
		self.menu_sobre_nosotros = pygameMenu.TextMenu(ventana,
												bgfun=background,
												color_selected=color_negro,
												font=pygameMenu.fonts.FONT_BEBAS,
												font_color=color_negro,
												font_size=30,
												menu_alpha=0,
												menu_height=int(tamaño_del_menu[1]),
												menu_width=int(tamaño_del_menu[0]),
												onclose=PYGAME_MENU_DISABLE_CLOSE,
												option_shadow=False,
												title='SOBRE NOSOTROS',
												window_height=tamaño_del_menu[1],
												window_width=tamaño_del_menu[0]
												)
		self.menu_sobre_nosotros.add_option("REGRESAR AL MENU PRINCIPAL", PYGAME_MENU_BACK)
		for self.m in SOBRE_NOSOTROS:
			self.menu_sobre_nosotros.add_line(self.m)
		self.menu_sobre_nosotros.add_line(PYGAMEMENU_TEXT_NEWLINE)




		# MENU COMO JUGAR
		self.menu_como_jugar = pygameMenu.TextMenu(ventana,
											bgfun=background,
											color_selected=color_blanco,
											font=pygameMenu.fonts.FONT_BEBAS,
											font_color=color_negro,
											font_size=30,
											menu_alpha=0,
											menu_height=int(tamaño_del_menu[1] ),
											menu_width=int(tamaño_del_menu[0]),
											onclose=PYGAME_MENU_DISABLE_CLOSE,
											option_shadow=False,
											title='COMO JUGAR',
											window_height=tamaño_del_menu[1],
											window_width=tamaño_del_menu[0]
											)
		self.menu_como_jugar.add_option("REGRESAR AL MENU PRINCIPAL", PYGAME_MENU_BACK)
		for self.m in COMO_JUGAR:
			self.menu_como_jugar.add_line(self.m)
		self.menu_como_jugar.add_line(PYGAMEMENU_TEXT_NEWLINE)

		# Opciones del Menú Configurador
		# Opción 1: Seleccionar Skins
		# Opción 2: Elegir fondo del juego
		# Opción 3: Cambiar la dificultad
		# Opción 4: Configurar obstáculos y powerups

		# MENÚ EDICIÓN SKINS
		self.menu_eskins = pygameMenu.Menu(ventana,
										bgfun=background,
										color_selected=color_blanco,
										font=pygameMenu.fonts.FONT_BEBAS,
										font_color=color_negro,
										font_size=30,
										menu_alpha=0,
										menu_height=int(tamaño_del_menu[1]),
										menu_width=int(tamaño_del_menu[0]),
										onclose=PYGAME_MENU_DISABLE_CLOSE,
										option_shadow=False,
										title='Editar Skins',
										window_height=tamaño_del_menu[1],
										window_width=tamaño_del_menu[0]
										)
		self.menu_eskins.add_option('REGRESAR AL MENU PRINCIPAL', PYGAME_MENU_BACK)
		self.menu_eskins.add_option('REGRESAR AL MENU PRINCIPALdas', PYGAME_MENU_BACK)


		# MENÚ SELECCIÓN FONDO
		self.menu_efondo = pygameMenu.Menu(ventana,
										bgfun=background,
										color_selected=color_blanco,
										font=pygameMenu.fonts.FONT_BEBAS,
										font_color=color_negro,
										font_size=30,
										menu_alpha=0,
										menu_height=int(tamaño_del_menu[1]),
										menu_width=int(tamaño_del_menu[0]),
										onclose=PYGAME_MENU_DISABLE_CLOSE,
										option_shadow=False,
										title='Seleccionar Fondo',
										window_height=tamaño_del_menu[1],
										window_width=tamaño_del_menu[0]
										)
		self.menu_efondo.add_option('Empezar!', game.ChasquiRunner)
		self.menu_efondo.add_option('REGRESAR AL MENU PRINCIPAL', PYGAME_MENU_BACK)

		# MENÚ CONFIGURACIÓN DE DIFICULTAD
		self.menu_edifi = pygameMenu.Menu(ventana,
										bgfun=background,
										color_selected=color_blanco,
										font=pygameMenu.fonts.FONT_BEBAS,
										font_color=color_negro,
										font_size=30,
										menu_alpha=0,
										menu_height=int(tamaño_del_menu[1]),
										menu_width=int(tamaño_del_menu[0]),
										onclose=PYGAME_MENU_DISABLE_CLOSE,
										option_shadow=False,
										title='Cambiar dificultad',
										window_height=tamaño_del_menu[1],
										window_width=tamaño_del_menu[0]
										)
		self.menu_edifi.add_option('Empezar!', game.ChasquiRunner)
		self.menu_edifi.add_option('REGRESAR AL MENU PRINCIPAL', PYGAME_MENU_BACK)

		# MENÚ CONFIGURACIÓN DE OBSTÁCULOS Y POWERUPS
		self.menu_obspw = pygameMenu.Menu(ventana,
										bgfun=background,
										color_selected=color_blanco,
										font=pygameMenu.fonts.FONT_BEBAS,
										font_color=color_negro,
										font_size=30,
										menu_alpha=0,
										menu_height=int(tamaño_del_menu[1]),
										menu_width=int(tamaño_del_menu[0]),
										onclose=PYGAME_MENU_DISABLE_CLOSE,
										option_shadow=False,
										title='Configurar obstaculos y powerups',
										window_height=tamaño_del_menu[1],
										window_width=tamaño_del_menu[0]
										)
		self.menu_obspw.add_option('Empezar!', game.ChasquiRunner)
		self.menu_obspw.add_option('REGRESAR AL MENU PRINCIPAL', PYGAME_MENU_BACK)


		# MENU CONFIGURADOR
		self.menu_configurador = pygameMenu.TextMenu(ventana,
										bgfun=background,
										color_selected=color_blanco,
										font=pygameMenu.fonts.FONT_BEBAS,
										font_color=color_negro,
										font_size=30,
										menu_alpha=0,
										menu_height=int(tamaño_del_menu[1]),
										menu_width=int(tamaño_del_menu[0]),
										onclose=PYGAME_MENU_DISABLE_CLOSE,
										option_shadow=False,
										title='Menu Configurador',
										window_height=tamaño_del_menu[1],
										window_width=tamaño_del_menu[0]
										)

		self.menu_configurador.add_option('Editar skins', self.menu_eskins)
		self.menu_configurador.add_option('Editar fondo', self.menu_efondo)
		self.menu_configurador.add_option('Cambiar dificultad', self.menu_edifi)
		self.menu_configurador.add_option('Configurar obstaculos y powerups', self.menu_obspw)
		self.menu_configurador.add_option('Regresar al menu principal', PYGAME_MENU_BACK)

		# MENU PRINCIPAL
		self.menu_principal = pygameMenu.TextMenu(ventana,
										bgfun=background,
										color_selected=color_blanco,
										font=pygameMenu.fonts.FONT_BEBAS,
										font_color=color_negro,
										font_size=30,
										menu_alpha=0,
										menu_height=int(tamaño_del_menu[1]),
										menu_width=int(tamaño_del_menu[0]),
										onclose=PYGAME_MENU_DISABLE_CLOSE,
										option_shadow=False,
										title='Menu Principal',
										window_height=tamaño_del_menu[1],
										window_width=tamaño_del_menu[0]
										)

		self.menu_principal.add_option('Empezar Juego', self.menu_jugar)
		self.menu_principal.add_option('Sobre Nosotros', self.menu_sobre_nosotros)
		self.menu_principal.add_option('Como jugar', self.menu_como_jugar)
		self.menu_principal.add_option('Configuracion de Objetos', self.menu_configurador)
		self.menu_principal.add_option('Salir', PYGAME_MENU_EXIT)

		# Loop del menu
		while True:
			# FPS DEL JUEGO
			clock.tick(60)
			# Eventos del menu
			eventos = pygame.event.get()
			for evento in eventos:
				if evento.type == QUIT:
					pygame.quit()
					sys.exit()

			# MENU PRINCIPAL
			self.menu_principal.mainloop(eventos)
			self.menu_configurador.mainloop(eventos)

			# Flip
			pygame.display.flip()
@ppizarror ppizarror changed the title Limits on creatong Menus Limits on creating Menus Jul 12, 2018
@ppizarror
Copy link
Owner

Hola, no tendrías alguna forma de poder probar el codigo? me gustaria tener algo en donde poder ejecutar tu función. (no me interesa el resto, pero por ejemplo me faltan muchas variables para poder correr tu problema).

Una cosa que me pareció curiosa fue el nombre de la variable tamaño_del_menu, según yo (no tengo acceso ahora a mi computador) no se pueden usar ñ o variables con tilde en una variable.

Si tienes problemas con pegar las cosas aqui me puedes enviar un correo con los archivos.
Saludos 😄

@ppizarror
Copy link
Owner

Pensando, no creo que se "caiga" por decirlo de cierta manera, quizás al tener muchas opciones el menú entra en alguna clase de bucle místico infinito y se congela, aunque no me imaginaría por qué, lo otro es que se haya formado alguna clase de bucle dentro de las configuraciones, por ejemplo sería ilegal tener una opción que apunte al mismo menú, ya que entraría en alguna cosa recursiva.

Seria interesante poner algún check así

@AlvaroN1997
Copy link
Author

@ppizarror Te he dejado un mensaje por Facebook! Por ese canal te he pasado el archivo completo con todas las imágenes

@ppizarror
Copy link
Owner

Lo revisaré, gracias 😃

@ppizarror
Copy link
Owner

Revisando el codigo me parece algo raro:

Cuando haces game.ChasquiRunner este deberia de cierta manera "pausar" el menu antes de empezar el mainloop del juego.

Esto es parecido a https://github.com/ppizarror/pygame-menu/blob/master/example2.py, en este se ve que la función play_function (que en este caso seria como tu ChasquiRunner) ver línea 75 primero cierra el menú principal (básicamente lo deshabilita, línea 102) y luego comienza el mainloop del juego.

Notar que cuando el menú se deshabilita luego para volverlo a usar tienes que habilitarlo (menu.enable()).

Dime si este pequeño cambio hace algo.

PD: Esto en verdad se programó así dado la dificultad de tener multithreading con pygame, por eso la unica solución que se me ocurrió para poder tener dos mainloops fue esa.
Revisa https://github.com/ppizarror/pygame-menu/blob/master/example2.py e intenta estructurar un poco el código de esa manera.

Saludos

@ppizarror
Copy link
Owner

Cerrado por inactividad

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants