import pygame as pgimport syspg.init()buttonFont = pg.font.SysFont("garamond", 25)screenGray = pg.Color('gray80')buttonGray2 = pg.Color('gray50')textColour = pg.Color('navy')screen = pg.display.set_mode((800, 600))clock = pg.time.Clock()cla
import pygame as pg import sys pg.init() buttonFont = pg.font.SysFont("garamond", 25) screenGray = pg.Color('gray80') buttonGray2 = pg.Color('gray50') textColour = pg.Color('navy') screen = pg.display.set_mode((800, 600)) clock = pg.time.Clock() class Button(pg.sprite.Sprite): def __init__(self, text, x, y, width, height, colour): super().__init__() self.image = pg.Surface((width, height)) self.image.fill(colour) self.rect = self.image.get_rect() txt = buttonFont.render(text, True, textColour) txtRect = txt.get_rect(center = self.rect.center) self.image.blit(txt, txtRect) self.rect.topleft = x, y def isPressed(self, event): if event.type == pg.MOUSEBUTTONDOWN: if self.rect.collidepoint(event.pos): return True return False def FrontPage(): screen.fill(screenGray) Continue = Button('Continue', 105, 455, 120, 50, buttonGray2) buttonsGroup1 = pg.sprite.Group(Continue) while True: for event in pg.event.get(): if event.type == pg.QUIT: pg.quit() sys.exit() elif Continue.isPressed(event): Menu() buttonsGroup1.draw(screen) pg.display.flip() clock.tick(60) def Menu(): screen.fill(screenGray) Scytale = Button('Scytale', 105,105,140,65, buttonGray2) Caesar = Button('Caesar', 330,105,140,65, buttonGray2) Vigenere = Button('Vigenere', 555,105,140,65, buttonGray2) Enigma = Button('Enigma', 105,430,140,65,buttonGray2) PublicKey = Button('Public Key', 330,430,140,65, buttonGray2) Rijndael = Button('Rijndael', 555,430,140,65, buttonGray2) buttonsGroup2 = pg.sprite.Group(Scytale,Caesar,Vigenere,Enigma,PublicKey,Rijndael) while True: for event in pg.event.get(): if event.type == pg.QUIT: pg.quit() sys.exit() buttonsGroup2.draw(screen) clock.tick(60) FrontPage()
上面是我的FrontPage的剥离代码,其上有一个按钮,当点击它时,应该将用户带到菜单屏幕,其中显示6个按钮以移动到用户选择的加密方法.
但是,当我按下继续按钮时,没有任何反应.
是因为Button Class有问题吗?
或者是否有其他东西使按钮停止工作?
提前致谢
你必须在菜单功能中调用pg.display.flip().我还对代码结构有一点建议.我会使用另一个函数或类(在本例中为main)来管理不同的场景.所以我首先将当前场景函数分配给变量并在主while循环中调用它.场景完成后,我返回下一个场景并将其分配给场景变量以交换场景.如果您只是直接从另一个场景中调用下一个函数,那么这将避免潜在的递归错误(尽管在简单的游戏或应用程序中你不太可能超过1000的递归限制).
import pygame as pg pg.init() screen = pg.display.set_mode((600, 400)) clock = pg.time.Clock() BLUE = pg.Color('dodgerblue3') ORANGE = pg.Color('sienna3') def front_page(): while True: for event in pg.event.get(): if event.type == pg.QUIT: return None # Press a key to return the next scene. elif event.type == pg.KEYDOWN: return menu screen.fill(BLUE) pg.display.flip() clock.tick(60) def menu(): while True: for event in pg.event.get(): if event.type == pg.QUIT: return None # Press a key to return the next scene. elif event.type == pg.KEYDOWN: return front_page screen.fill(ORANGE) pg.display.flip() clock.tick(60) def main(): scene = front_page # Set the current scene. while scene is not None: # Execute the current scene function. When it's done # it returns either the next scene or None which we # assign to the scene variable. scene = scene() main() pg.quit()