2 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
首先在應(yīng)用程序循環(huán)之前對(duì)按鈕進(jìn)行初始化,而不是在循環(huán)中連續(xù)進(jìn)行
def main():
# init buttons
alphabet = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
letter_x1, letter_y1 = 40, 375
letter_x2, letter_y2 = 40, 435
for i in range(13):
letter_1 = Button((255, 255, 255), letter_x1, letter_y1, 25, alphabet[i])
letters.append(letter_1)
letter_x1 += 60
for i in range(13, 26):
letter_2 = Button((255, 255, 255), letter_x2, letter_y2, 25, alphabet[i])
letters.append(letter_2)
letter_x2 += 60
# application loop
while run:
# [...]
給按鈕添加一個(gè)屬性clicked,用來存儲(chǔ)按鈕(類似于visible屬性):
class Button:
def __init__(self, color, x, y, radius, text=""):
# [...]
self.visible = True
self.clicked = False
設(shè)置屬性,點(diǎn)擊按鈕時(shí):
def main():
# [...]
while run:
# [...]
for event in pygame.event.get():
# [...]
elif event.type == pygame.MOUSEBUTTONDOWN:
for letter in letters:
if letter.hover(pygame.mouse.get_pos()):
letter.clicked = True
現(xiàn)在您可以根據(jù)clicked按鈕的狀態(tài)繪制對(duì)象:
def main():
# [...]
def redraw_window():
window.fill((255, 255, 255))
window.blit(man[0], (20, 100))
# DRAWS LETTER BUTTONS
for letter in letters:
letter.draw(window, (0, 0, 0))
if letter.clicked:
# [...]
pygame.display.update()
# [...]
while run:
redraw_window()
# [...]
或者或另外,您可以將單擊的最后一個(gè)按鈕存儲(chǔ)到變量 ( lastLetterClicked) 并根據(jù)變量繪制一些內(nèi)容:
def main():
# [...]
def redraw_window():
# [...]
if lastLetterClicked:
# [...]
pygame.display.update()
lastLetterClicked = None
while run:
redraw_window()
# [...]
for event in pygame.event.get():
# [...]
elif event.type == pygame.MOUSEBUTTONDOWN:
for letter in letters:
if letter.hover(pygame.mouse.get_pos()):
# [...]
lastLetterClicked = letter
# [...]

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
好的,讓我們從第一個(gè)開始,我懷疑這里的一些變化也可能有助于解決其他問題。nonice,您正在“while run”循環(huán)中創(chuàng)建“初始彩色按鈕”,這意味著它會(huì)一次又一次地發(fā)生,但是您在事件循環(huán)中對(duì)按鈕進(jìn)行了重新染色,這僅在出現(xiàn)新事件時(shí)才會(huì)發(fā)生。你看到問題了嗎?懸停事件發(fā)生后的下一分鐘,程序?qū)⒗L制一個(gè)常規(guī)按鈕!我會(huì)說這條線
letter.color = (0, 255, 0)
在 OOP 中被認(rèn)為是一個(gè)壞習(xí)慣,因?yàn)槟幌朐陬愔飧膶?duì)象屬性。相反,讓我們構(gòu)建一個(gè)“set_color”方法
def set_color(self , color): self.color = color
并啟動(dòng)按鈕 letter_1 = Button((255, 255, 255), letter_x1, letter_y1, 25, alphabet[i])
在游戲開始之前,在 while 運(yùn)行循環(huán)之外
在 while 循環(huán)中你可以只添加一個(gè)循環(huán)來繪制它們。
for letrer in letters: letter.draw()
添加回答
舉報(bào)