Я создаю игру, но у меня проблема с моим классом кнопок для моего графического интерфейса.Нет ошибок компиляции и ошибок времени выполнения.Единственная проблема заключается в том, что при запуске он немедленно замораживает окно pygame.Я не знаю, как решить эту проблему.
Я попытался поиграться с функцией обратного вызова (которую я полностью удалил), а также с циклом обновления и рисования, но, похоже, ничего не работает.
Python 3.7.0 и Pygame 1.9.4
Класс кнопок:
import sys
import time
import pygame
pygame.init()
class button:
def __init__(self, txt, location, bg=(255,255,255),fg=(0,0,0),size=(80,30),font_name="Times New Roman",font_size=16):
#bg is the colour of the button
#fg is the colour of the text
#location refers to the center points of the button
self.colour = bg
self.bg = bg
self.fg = fg
self.size = size
self.font = pygame.font.SysFont(font_name,font_size)
self.txt = txt
self.txt_surf = self.font.render(self.txt, 1, self.fg)
self.txt_rect = self.txt_surf.get_rect(center=[s//2 for s in self.size])
self.surface = pygame.surface.Surface(size)
self.rect = self.surface.get_rect(center=location)
def mouseover(self):
self.bg = self.colour
pos = pygame.mouse.get_pos()
if self.rect.collidepoint(pos):
self.bg = (200,200,200)
def draw(self, screen):
self.mouseover()
self.surface.fill(self.bg)
self.surface.blit(self.txt_surf, self.txt_rect)
screen.blit(self.surface, self.rect)
Фактическое обновление / цикл рисования
import gui
import pygame
import sys
import time
import win32api
pygame.init()
screen = pygame.display.set_mode((400,400))
button1 = gui.button("No", (200,200))
intro = True
while intro:
screen.fill((255,255,255))
button1.draw(screen)
if win32api.GetKeyState(0x01) == -127 or win32api.GetKeyState(0x01) == -128:
if button1.rect.collidepoint(pygame.mouse.get_pos()):
intro = False
pygame.quit()
sys.exit()
pygame.display.flip()
pygame.time.wait(20)
Я действительно просто хочу окночтобы остановить замерзание на бегу и фактически нажать кнопку работы.Что нужно сделать, это немедленно выйти из приложения, когда вы нажмете кнопку в середине.Хотя на самом деле не делать этого.