#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未定义。
答案 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.