我一直在研究这个项目,我创建了一个包含功能和事件的选择屏幕,这样当鼠标悬停在按钮上时它会变成橙色。但它是一个选择屏幕,一旦点击一个按钮,我希望它保持突出显示该项目已被选中,但我似乎无法弄清楚如何做到这一点。这是我的代码:
def button2(msg,x,y,w,h,ic,ac, action=None):
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x+w > mouse[0] > x and y+h > mouse[1] > y:
pygame.draw.rect(gameDisplay, ac, (x,y,w,h))
if click[0] == 1 and action != None:
if action == "START":
game_loop()
elif action == "BACK":
game_intro()
quit()
elif action == "Playstation 4":
print("")
else:
pygame.draw.rect(gameDisplay, ic, (x,y,w,h))
smallText = pygame.font.Font("freesansbold.ttf", 20)
textSurf, textRect = text_objects(msg, smallText)
textRect.center = ( (x+(w/2)), (y+(h/2)) )
gameDisplay.blit(textSurf, textRect)
#Selection Screen
def game_select_items_menu():
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
gameSelectItems = False
while not gameSelectItems:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
blank_image(x, y)
button2("Xbox One", 374, 60, 168, 48, white, orange,"Xbox One") #XBOX ONE - BUTTON (TOP ROW)
button2("Playstation 4", 200, 60, 168, 48, white, orange,"Playstation 4")#PLAYSTATION 4 - BUTTON (TOP ROW)
button("Kettle", 30, 60, 163, 48, white, orange)#Kettle - BUTTON (TOP ROW)
button("Lewi Jeans", 374, 160, 168, 48, white, orange)#LEWI JEANS - BUTTON(SECOND ROW)
button("MacBook", 200, 160, 168, 48, white, orange)#MACBOOK - BUTTON (SECOND ROW)
button("Samsung TV", 30, 160, 163, 48, white, orange)#SAMSUNG TV - BUTTON (SECOND ROW)
button("Nike Air Max", 374, 250, 168, 48, white, orange)#NIKE AIR MAX - BUTTON (THIRD ROW)
button("Tablet", 200, 250, 168, 48, white, orange)#TABLET - BUTTON (THIRD ROW)
button("Perfume", 30, 250, 163, 48, white, orange)#PERFUME - BUTTON (THIRD ROW)
#button("", 30, 340, 300, 150, white, orange)#Print Box
#Bottom buttons(Start,Back)
button2("START", 374, 370, 163, 48, green, green_bright, "START")#START - BUTTON (BOTTOM)
button2("BACK", 374, 430, 163, 48, green, green_bright, "BACK")#BACK - BUTTON (BOTTOM)
pygame.display.update()
clock.tick(80) #Setting the fps
答案 0 :(得分:-1)
global clickedButtons,sumOfCosts,textDisp
clickedButtons=[]
sumOfCosts=[0,0]
textDisp = None
def addCostsAndDisplay(msg,cost,weight):
global sumOfCosts
sumOfCosts[0]+=cost
sumOfCosts[1]+=weight
basicfont = pygame.font.SysFont(None, 48)
text = basicfont.render('adding '+str(msg)+' adds up to '+str(sumOfCosts[0])+' and weighs '+str(sumOfCosts[1]), True, (255, 0, 0), (255, 255, 255))
return text
def button2(msg,x,y,w,h,ic,ac,cost=1,weight=1, action=None):
global clickedButtons,textDisp
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if x+w > mouse[0] > x and y+h > mouse[1] > y:
pygame.draw.rect(gameDisplay, ac, (x,y,w,h))
if click[0] == 1 and action != None:
if not (msg in clickedButtons):
#Save that this button has been clicked
clickedButtons.append(msg)
textDisp=addCostsAndDisplay(msg,cost,weight)
if action == "START":
game_loop()
elif action == "BACK":
game_intro()
quit()
elif action == "Playstation 4":
print("")
else:
#Check if this button has been clicked
if (msg in clickedButtons):
pygame.draw.rect(gameDisplay, ac, (x,y,w,h))
else:
pygame.draw.rect(gameDisplay, ic, (x,y,w,h))
smallText = pygame.font.Font("freesansbold.ttf", 20)
textSurf, textRect = text_objects(msg, smallText)
textRect.center = ( (x+(w/2)), (y+(h/2)) )
gameDisplay.blit(textSurf, textRect)
#Selection Screen
def game_select_items_menu():
global textDisp
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
gameSelectItems = False
while not gameSelectItems:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
blank_image(x, y)
if (not textDisp is None):
screen=pygame.display.get_surface()
textRect=textDisp.get_rect()
textRect.centerx = x
textRect.centery = y
screen.blit(textDisp,textRect)
button2("Xbox One", 374, 60, 168, 48, white, orange,10,20,"Xbox One") #XBOX ONE - BUTTON (TOP ROW)
button2("Playstation 4", 200, 60, 168, 48, white, orange,20,20"Playstation 4")#PLAYSTATION 4 - BUTTON (TOP ROW)
button("Kettle", 30, 60, 163, 48, white, orange)#Kettle - BUTTON (TOP ROW)
button("Lewi Jeans", 374, 160, 168, 48, white, orange)#LEWI JEANS - BUTTON(SECOND ROW)
button("MacBook", 200, 160, 168, 48, white, orange)#MACBOOK - BUTTON (SECOND ROW)
button("Samsung TV", 30, 160, 163, 48, white, orange)#SAMSUNG TV - BUTTON (SECOND ROW)
button("Nike Air Max", 374, 250, 168, 48, white, orange)#NIKE AIR MAX - BUTTON (THIRD ROW)
button("Tablet", 200, 250, 168, 48, white, orange)#TABLET - BUTTON (THIRD ROW)
button("Perfume", 30, 250, 163, 48, white, orange)#PERFUME - BUTTON (THIRD ROW)
#button("", 30, 340, 300, 150, white, orange)#Print Box
#Bottom buttons(Start,Back)
button2("START", 374, 370, 163, 48,green, green_bright,0,0 "START")#START - BUTTON (BOTTOM)
button2("BACK", 374, 430, 163, 48, green, green_bright,0,0 "BACK")#BACK - BUTTON (BOTTOM)
pygame.display.update()
clock.tick(80) #Setting the fps
更改这些行以更改文本的坐标(它们接近结尾)
textRect.centerx = x
textRect.centery = y
尝试一下。
答案 1 :(得分:-1)
global clickedButtons,priceAndWeight
clickedButtons=[]
priceAndWeight=[250, 150]
def button2(msg,x,y,w,h,ic,ac, action=None):
global clickedButtons
mouse = pygame.mouse.get_pos()
click = pygame.mouse.get_pressed()
if click[0] == 1 and action != None:
if not (msg in clickedButtons):
# Save that this button has been clicked
clickedButtons.append(msg)
# Add price and weight (You need to get price and weight frome somewhere)
global priceAndWeight
priceAndWeight[0] = priceAndWeight[0] + price
priceAndWeight[1] = priceAndWeight[1] + weight
elif action == "Playstation 4":
print("")
else:
#Check if this button has been clicked
if (msg in clickedButtons):
pygame.draw.rect(gameDisplay, ac, (x,y,w,h))
else:
pygame.draw.rect(gameDisplay, ic, (x,y,w,h))
smallText = pygame.font.Font("freesansbold.ttf", 20)
textSurf, textRect = text_objects(msg, smallText)
textRect.center = ( (x+(w/2)), (y+(h/2)) )
gameDisplay.blit(textSurf, textRect)