
estaba desarrollado un juego, poco original digo yo, pero divertido. El caso es que queria comenzar hacindo los menus, pero en lugar de hacerlos como lo explica hugo en su articulo de menus que esta en la wiki queria hacerlo que fueran como botones presionables con el puntero del mouse!.
la cosa es que me puse a hacer una clase para los menus, lo probe, pero no funcionan como deberia

el codigo del framework:
- Código: Seleccionar todo
#*******************************************************************************
# framework.py: marco de trabajo para el juego ClickMania.
# contiene metodos para menus, escenas, tiempo.
#*******************************************************************************
import pygame
from pygame.locals import *
import os
import pytweener
def centerxsurf(rect):
sizexsurf = rect.w
posx = pygame.display.get_surface().get_size()[0] / 2 - sizexsurf / 2
return posx
def putysurf(rect, porcent):
ycenter = rect.h / 2
screenysize = pygame.display.get_surface().get_size()[1]
porcent = int(porcent)
ypos = porcent * screenysize / 100
return ypos + ycenter
def putxsurf(rect, porcent):
xcenter = rect.w / 2
screenxsize = pygame.display.get_surface().get_size()[0]
porcent = int(porcent)
xpos = porcent * screenxsize / 100
return xpos - xcenter
class scenes:
def __init__(self, records = ""):
# colores r g b
self.red = (255, 0, 0)
self.green = (0, 255, 0)
self.blue = (0, 0, 255)
self.white = (255, 255, 255)
self.black = (0, 0, 0)
self.scene = 0
self.background = self.blue
#cargamos las tipografias.
pygame.font.init()
self.head = pygame.font.Font("res/fonts/vtks.ttf", 90)
self.menu = pygame.font.Font("res/fonts/Junkyard.ttf", 25)
self.other = pygame.font.Font("res/fonts/RadisSans-medium.ttf", 19)
def menus(self):
""" Dibuja un menu segun la escena idicada por Scene.
"""
# primero dibujamos el menu principal
if self.scene == 0:
# limpiamos la pantalla.
pygame.display.get_surface().fill(self.background)
# preparamos los "carteles" que apareceran en el menu.
nombre_juego = self.head.render("ClickMania", True, self.white)
menu_jugar = self.menu.render("Jugar partida", True, self.white)
menu_halloffame = self.menu.render("Salon de la fama", True, self.white)
menu_opciones = self.menu.render("Opciones", True, self.white)
menu_salir = self.menu.render("Salir del juego", True, self.white)
# obtenemos los rects de los carteles.
rect_juego = nombre_juego.get_rect()
rect_jugar = menu_jugar.get_rect()
rect_halloffame = menu_halloffame.get_rect()
rect_opciones = menu_opciones.get_rect()
rect_salir = menu_salir.get_rect()
# calculamos las posiciones de cada cartel en la pantalla
nombre_juego_pos = (centerxsurf(rect_juego), putysurf(rect_juego, 20))
menu_jugar_pos = centerxsurf(rect_jugar), putysurf(rect_jugar, 40)
menu_halloffame_pos = centerxsurf(rect_halloffame), putysurf(rect_halloffame, 45)
menu_opciones_pos = centerxsurf(rect_opciones), putysurf(rect_opciones, 50)
menu_salir_pos = centerxsurf(rect_salir), putysurf(rect_salir, 55)
# mostramos en la pantalla.
#--
blitstack = []
lastblit = None
#--
screen = pygame.display.get_surface()
#--
if rect_jugar.collidepoint(pygame.mouse.get_pos()):
menu_jugar = self.menu.render("Jugar partida", True, self.red, self.white)
if rect_halloffame.collidepoint(pygame.mouse.get_pos()):
menu_halloffame = self.menu.render("Salon de la fama", True, self.red, self.white)
if rect_opciones.collidepoint(pygame.mouse.get_pos()):
menu_opciones = self.menu.render("Opciones", True, self.red, self.white)
if rect_salir.collidepoint(pygame.mouse.get_pos()):
menu_salir = self.menu.render("Salir del juego", True, self.red, self.white)
#---
screen.blit(nombre_juego, nombre_juego_pos)
screen.blit(menu_jugar, menu_jugar_pos)
screen.blit(menu_halloffame, menu_halloffame_pos)
screen.blit(menu_opciones, menu_opciones_pos)
screen.blit(menu_salir, menu_salir_pos)
def main():
import pygame
pygame.init()
pygame.display.set_mode((800, 600))
miescena = scenes()
tiempo = pygame.time.Clock()
salir = False
while not salir:
tiempo.tick_busy_loop(60)
for evento in pygame.event.get():
if evento.type == pygame.QUIT:
salir = True
miescena.menus()
pygame.display.flip()
if __name__ == "__main__": main()
aqui todo el trabajo, para que sea 100% corrible: Clickmania! (src).
Otra duda que me surge es el flujo de ejecucion, en otras palabras, cuando tal boton es seleccionado; por ejemplo, opciones, como podriamos manejar la visualizacion de tal escenario. Ya que en pygame los escenario como tal no existen!
(me dare una vuelta por el codigo del juego de Ceferino, creado por Losersjuegos, para ver que aprendo! :p)