第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

單擊“播放”時如何清除游戲屏幕并移動到新場景

單擊“播放”時如何清除游戲屏幕并移動到新場景

qq_笑_17 2021-12-26 10:41:41
我不知道如何使用我的按鈕功能將 background.jpg 覆蓋在按鈕上或擦除當前屏幕并在場景清除后將背景放回原位。import pygamepygame.init()screen = pygame.display.set_mode((800, 600))clock = pygame.time.Clock()BLACK = (0, 0, 0)BACKGROUND = (200, 230, 234)WHITE = (255, 255, 255)HOVER_COLOUR = (50, 70, 90)# Text Variables FONT = pygame.font.SysFont ("Times New Norman", 60)TEXT = FONT.render ("", True, WHITE)background_images = pygame.image.load("background.jpg").convert()screen.blit(background_images, [0,0])screen.blit(TEXT, (150, 50))# Text & Rectangles constructiontext1 = FONT.render("PlAY", True, WHITE)text2 = FONT.render("CONTROLS", True, WHITE)text3 = FONT.render("DIFFICULTY", True, WHITE)text4 = FONT.render("SCOREBOARD", True, WHITE)rect1 = pygame.Rect(250,200,300,80)rect2 = pygame.Rect(250,300,300,80)rect3 = pygame.Rect(250,400,300,80)rect4 = pygame.Rect(250,500,300,80)# The button construction arry. Text and Rectangle buttons = [        [text1, rect1, BACKGROUND, 1],        [text2, rect2, BACKGROUND, 2],        [text3, rect3, BACKGROUND, 3],        [text4, rect4, BACKGROUND, 4],        ]# Function for button printing (testing)def on_button(buttons):        print(buttons[3])def game_intro():        while True:                for event in pygame.event.get():                        if event.type == pygame.QUIT:                                return#Run Gamegame_intro()pygame.quit()如您所見,操作如下:if button == buttons[0]:screen.fill(0,0,0)是我目前正在使用的。if 語句工作正常,iv 使用打印操作測試了它的反饋,但我無法使用 Pygame 函數(shù)。
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經(jīng)驗 獲得超8個贊

問題是由


screen.fill(0,0,0)

因為第二個參數(shù) topygame.Surface.fill()被假定為一個矩形(例如pygame.Rect),它將填充限制為特定區(qū)域。


第一個參數(shù)pygame.Surface.fill()必須是 RGB 序列、RGBA 序列或顏色索引。


所以它必須是


screen.fill( (0,0,0) )

或者


screen.fill(0)

按鈕仍然是它們,因為它們在每一幀中都是連續(xù)繪制的:


for text, rect, colour, button_id in buttons:

    pygame.draw.rect(screen, colour, rect)

    screen.blit(text, rect)

添加一個全局狀態(tài)變量 ( play),該變量在按下播放按鈕時設置。在函數(shù)中改變狀態(tài)on_button,使用global語句改變?nèi)肿兞康闹祊lay。根據(jù)狀態(tài)繪制場景:


play = False

def on_button(buttons):

    global play 

    play = buttons[3] == 1

    print(buttons[3], play)

def game_intro():


    # [...]


    if play:

        screen.fill(0)


        # [...]            


    else: 

        for text, rect, colour, button_id in buttons:

            pygame.draw.rect(screen, colour, rect)

            screen.blit(text, rect)


    pygame.display.flip()

    clock.tick(15)


查看完整回答
反對 回復 2021-12-26
?
慕后森

TA貢獻1802條經(jīng)驗 獲得超5個贊

直接回答問題:


if button[1].collidepoint(event.pos):

    on_button(button)

if button == buttons[0]:

    screen.fill(0,0,0)

檢查你的縮進。對于每個按鈕,代碼進行.collidepoint檢查并可能調(diào)用on_button,然后它還會檢查正在檢查的按鈕 -無論.collidepoint結果如何。


if button[1].collidepoint(event.pos):

    on_button(button)

    if button == buttons[0]:

        screen.fill(0,0,0)

現(xiàn)在screen.fill只有當兩個條件都為真時才會發(fā)生 - 即正在檢查的按鈕是buttons[0],并且event.pos(即用戶單擊的位置)在該按鈕內(nèi)。


但是為了解決這個問題——你真的應該使用更復雜的東西來代表你的按鈕?;旧希覀兿M鹢n_button代碼根據(jù)它是哪個按鈕來決定單擊按鈕時要執(zhí)行的操作。為了使這項工作順利進行,buttons信息需要包含一些說明on_button該做什么的內(nèi)容。


Python 允許我們在這里做一個巧妙的技巧:事物的名稱只是名稱,即使被命名的事物是一個函數(shù) - 這意味著,例如,我們可以將這些名稱放在一個列表中,然后將它們?nèi)〕霾⑹褂盟鼈儊碚{(diào)用函數(shù)。例如,如果我們有一個函數(shù)來解釋播放按鈕應該做什么:


def do_play():

    # up to you ;)

然后設置按鈕來存儲該名稱,而不是按鈕 ID:


play_button = [text1, rect1, BACKGROUND, do_play]

現(xiàn)在我們可以讓 on_button 為我們解決這個問題:


def on_button(button):

    button[3]()

當該.collidepoint按鈕的測試通過時,它會被傳遞給on_button,它會查找函數(shù)名稱do_play并調(diào)用該函數(shù)。簡單的 :)


(下一個復雜級別是使用類來表示 Button 信息而不是普通列表。)


查看完整回答
反對 回復 2021-12-26
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號