用按钮擦除屏幕

时间:2016-03-29 12:38:49

标签: python button pygame

#Imported Pygame
import pygame

#The Colors
BLACK = ( 0, 0, 0)
GREEN = ( 0, 255, 0)
WHITE = ( 255, 255, 255)
RED = ( 255, 0, 0)
ORANGE = ( 255, 115, 0)
YELLOW = ( 242, 255, 0)
BROWN = ( 115, 87, 39)
PURPLE = ( 298, 0, 247)
GRAY = ( 168, 168, 168)
PINK = ( 255, 0, 234)
pygame.init()
#The Screen
screen = pygame.display.set_mode([1000,500])
#Name of the window
pygame.display.set_caption("My first game")

clock = pygame.time.Clock()

#The sounds

# Positions of graphics
background_position = [0,0]
singleplayer_position = [350, 200]
tutorial_position = [350,300]
sorry_position = [0,0]
developer_position = [0,450]
rules_position = [0,0]
#The graphics
background_image = pygame.image.load("Castle.png").convert()
singleplayer_image = pygame.image.load("SinglePlayer.png").convert()
singleplayer_image.set_colorkey(WHITE)
tutorial_button = pygame.image.load("Tutorial_button.png").convert()
sorry_message = pygame.image.load("Sorry.png").convert()
sorry_message.set_colorkey(WHITE)
developer_message = pygame.image.load("Developer.png").convert()
developer_message.set_colorkey(WHITE)
Rules_image = pygame.image.load("Rules.png").convert()
#Main Loop __________________________

done = False

while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
    # Copy of background or main menu
    screen.blit(background_image, background_position)

    #Copy of other images
    mouse_pos = pygame.mouse.get_pos()
    my_rect = pygame.Rect(350,200,393,75)
    tutorial_rect = pygame.Rect(350,300,393,75)
    screen.blit(singleplayer_image, singleplayer_position)
    screen.blit(tutorial_button, tutorial_position)
    screen.blit(developer_message, developer_position)
    if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos):
       screen.blit(sorry_message, sorry_position)
       correct = False
    if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos):
          #Here I make the screen fill white


    if python.mouse.get_pressed()[0]tutorial_rect.collidepoint(mouse.pos):
        correct = True
    if correct == True:
        screen.blit(Rules_image, rules_position)





    pygame.display.flip()
    clock.tick(60)
#To quit game
pygame.quit()

这基本上就是我的代码...当我点击单人游戏按钮时,我让它区域变白但是它不会停留在那里。就像当我按下它一次并按住单人按钮时它会保持白色,但当我取消屏幕时,它会恢复原状。无论如何,当我点击单人游戏按钮时,我可以删除之前所做的所有内容并启动新屏幕吗?'

好的回答你给我的答案.. 我像你说的那样构建了我的代码。

 if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos):
          color_white = True
          if color_white = True
             screen.fill(WHITE)

这不起作用,因为它仍然不会使屏幕保持白色。 我试过这个。

if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos):
     color_white = True
if color_white = True
     screen.fill(WHITE)

这似乎也不起作用,因为它一直说color_white未定义。

1 个答案:

答案 0 :(得分:1)

你的混乱是由while循环及其行为引起的,所以我会解释这个问题来回答你的问题。

快速注意:如果您没有在代码末尾使用带有勾号的pygame时钟对象,请注释,我会在结束时解释,重要的是你这样做。(http://www.pygame.org/docs/ref/time.html

好的,问题是:点击后图片没有保持白色。如果按住鼠标,它会保持白色,但一旦抬起它就会消失。我猜你甚至一旦举起鼠标就想让它保持白色。

目前,您的代码会在if语句中将图片的颜色设置为白色。

if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos):

查看.get_pressed()的内容。如果按下鼠标按钮,则返回True。因此,当你点击它时,它会显示为True,如果你按住它,它会说是True。如果您没有点击或按住,则为False。因此,当鼠标被点击或按下时,它只会将其着色为白色,因为当它被告知这样做时。让它恢复正常的原因是你在循环早期的blits。每个循环,pygame使图像正常(通过blit),如果您的语句评估为True,则将图片颜色设置为白色。这意味着只要你的if语句为False,图片就会保持正常。

要使其保持涂成白色,请使用布尔值。

    if pygame.mouse.get_pressed()[0] and  my_rect.collidepoint(mouse_pos):
        color_white = True

然后不是将代码放在if语句中的白色上,而现在将boolean设置为true,而是在循环结束之前创建一个新的if语句。

if color_white:
    # Code to make the screen white.

这样,即使没有按住它也可以保持白色。如果您想通过另一次点击使其恢复正常。您可以扩展您的第一个if语句。

if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos):
      if color_white is True:
          color_white = False
      else:
          color_white = True

可以用更短的方式编码......

color_white = False if color_white == True else True

编辑:我在考虑事件时编写了以前的代码。如果您使用MOUSEBUTTONDOWN事件更改颜色,此代码将起作用。但是,如果要使用get_pressed(),则必须使用不同的鼠标按钮。如果你只使用左键单击,程序应该如何知道是否要关闭或打开这么多循环?

我会在考虑get_pressed的情况下重写代码。

    if pygame.mouse.get_pressed()[0] and my_rect.collidepoint(mouse_pos):
        color_white = True

    if pygame.mouse.get_pressed()[1] and my_rect.collidepoint(mouse_pos): # Not sure if it should be 1 or 2 in get_pressed, but I'm assuming they represent the right click and middle mouse button. So you can use these to turn the screen back to normal.
        color_white = False

Edit2:您的color_white未定义,因为在代码中的if语句之后它才会被定义。所以在你有机会点击(并定义它)之前,循环运行并转到

if color_white:

但是color_white还没有存在于计算机中。要解决这个问题,请在while循环之前定义color_white。

color_white = False # Default to not color the screen white.