2015-08-14 2 views
0

Я сделал этот код, но я не могу сделать больше кнопок, если я его скопирую или что-нибудь , так что я могу получить больше кнопок, так как я установил этот код? и можно ли ввести def display_button() и вызвать его в цикле?Как сделать более одной кнопки в pygame?

def Main(): 

pygame.font.init() 
font = pygame.font.Font(None, 25) 
my_font = pygame.font.SysFont("segoe print", 16) 

button_surf = pygame.Surface((60, 40)) 
button_rect = button_surf.get_rect() 
button_surf.fill(WHITE) 
button_rect.center = (500, 750) 
txt_surf = my_font.render("LEFT", 1, BLACK) 
txt_rect = txt_surf.get_rect(center=(30,20)) 
button_surf.blit(txt_surf, txt_rect) 


Seconds = 0 
Frame=0 

gameExit = False 
while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 

    Screen.fill(BLACK) 
    Screen.blit(button_surf, button_rect) 

, что мой код

ответ

0

Просто повторите тот же код с разными местами Rect, а также различными именами переменными.

button_surf2 = pygame.Surface((60, 40)) 
button_rect2 = button_surf.get_rect() 
button_surf2.fill(WHITE) 
button_rect2.center = (600, 850) 
txt_surf2 = my_font.render("LEFT", 1, BLACK) 
txt_rect2 = txt_surf2.get_rect(center=(30,20)) 
button_surf2.blit(txt_surf2, txt_rect2) 

Или, если вы хотите немного аккуратно, вы можете сделать класс кнопки.

def Button: 
    def __init__(self, width, height, center, text): 
     self.surface = pygame.Surface((width, height)) 
     self.rect = self.surface.get_rect() 
     self.surface.fill(WHITE) 
     self.rect.center = center 
     self.textSurf = my_font.render(text, 1, BLACK) 
     self.textRect = self.textSurf.get_rect(center = (30, 20)) 
     self.surf.blit(self.textSurf, self.textRect) 

Затем вы должны составить список всех кнопок, и перебирать их, когда вы хотите сделать, или проверить наличие щелчков.

0

Я думаю, вы должны использовать Groups

Я использую это, вот пример:

buttons = pygame.sprite.Group() 
picnames = ["Play","Quit"] 
place = y/2 - 10 * (len(picnames) - 1) - 8 
for picname in picnames: 
    button = pygame.sprite.Sprite() 
    button.name = picname 
    button.image = pygame.image.load("pic/" + picname + ".PNG").convert_alpha() 
    button.rect = button.image.get_rect() 
    button.rect.center = (x/2, place) 
    place += 20 
    buttons.add(button) 

buttons.draw(screen) 

Here весь мой код.

Смежные вопросы