主要应该是做按钮时鼠标位置监测的问题,我一共做了四个按钮,每个对应一个窗口,四个按钮鼠标位置监测部分的代码都是一样的,因为我想让按钮每次出现时在游戏画面上的位置一样,但测试时点击总会莫名其妙地跳过甚至直接结束。。。
代码如下
import pygame
pygame.init()
ck = pygame.display.set_mode((800,600)) # 游戏窗口
pygame.display.set_caption("我的游戏") # 给窗口取个名
clock = pygame.time.Clock() # 游戏刷新速度(我这么理解)
start_ck = pygame.Surface(ck.get_size()) # 开始界面的画布
start_ck.fill((0,0,0)) # 白色画布1(开始界面用的)
white=255,255,255 #定义一下颜色
#加载素材。jixu就是'continue',继续,是我用格式为png的艺术字图片充当的游戏界面上的按钮,jixu到jixu1c分别是白、蓝、绿、黄色,而jixu2是红色的,想做出的效果是鼠标移动到字上面时会变成红色
jixu1= pygame.image.load(r'F:\python 练习\jixu1.png')
jixu1.convert()
jixu1a= pygame.image.load(r'F:\python 练习\jixu1a.png')
jixu1a.convert()
jixu1b=pygame.image.load(r'F:\python 练习\jixu1b.png')
jixu1b.convert()
jixu1c=pygame.image.load(r'F:\python 练习\jixu1c.png')
jixu1c.convert()
jixu2=pygame.image.load(r'F:\python 练习\jixu2.png')
jixu2.convert()
#接下来我想做四个游戏窗口,每一个窗口上都会有一个continue,我想做出的效果是鼠标移动上去会变红色,点击就会跳转到下一个窗口,四个事件用n1到n4标明
#第一个窗口(白色按钮),没有问题,移动上去会变色,点击也会跳转
n1 = True
while n1:
#鼠标检测程序
clock.tick(30)
buttons = pygame.mouse.get_pressed()
x1, y1 = pygame.mouse.get_pos()
if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
start_ck.blit(jixu2, (260, 480))
if buttons[0]:
n1 = False
else:
start_ck.blit(jixu1, (260, 480))
ck.blit(start_ck,(0,0))
pygame.display.update()
#这里在窗口上写一个标记
myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
textImage=myfont.render("第一窗口",True,white)
start_ck.blit(textImage,(600,560))
# 下面是监听退出动作
# 监听事件
for event in pygame.event.get():
# 判断事件类型是否是退出事件
if event.type == pygame.QUIT:
print("游戏退出...")
# quit 卸载所有的模块
pygame.quit()
# exit() 直接终止当前正在执行的程序
exit()
#第二个窗口(蓝色按钮),问题来了,点击完第一个窗口以后,第二个窗口永远出不来,大部分情况下是直接跳到第三个或者第四个窗口,再点就程序结束,有时候中间的窗口会闪一下就过去,还有几次是第一次点完就直接结束程序了,一直解决不了。。我在想这是不是鼠标位置的问题…………
n2 = True
while n2:
#鼠标监测程序
clock.tick(30)
buttons = pygame.mouse.get_pressed()
x1, y1 = pygame.mouse.get_pos()
if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
start_ck.blit(jixu2, (260, 480))
if buttons[0]:
n2 = False
else:
start_ck.blit(jixu1a, (260, 480))
ck.blit(start_ck,(0,0))
pygame.display.update()
#这里在窗口上写一个标记
myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
textImage=myfont.render("第二窗口",True,white)
start_ck.blit(textImage,(600,560))
# 下面是监听退出动作
# 监听事件
for event in pygame.event.get():
# 判断事件类型是否是退出事件
if event.type == pygame.QUIT:
print("游戏退出...")
# quit 卸载所有的模块
pygame.quit()
# exit() 直接终止当前正在执行的程序
exit()
#第三个窗口(绿色按钮)
n3 = True
while n3:
#鼠标监测程序
clock.tick(30)
buttons = pygame.mouse.get_pressed()
x1, y1 = pygame.mouse.get_pos()
if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
start_ck.blit(jixu2, (260, 480))
if buttons[0]:
n3 = False
else:
start_ck.blit(jixu1b, (260, 480))
ck.blit(start_ck,(0,0))
pygame.display.update()
#这里在窗口上写一个标记
myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
textImage=myfont.render("第三窗口",True,white)
start_ck.blit(textImage,(600,560))
# 下面是监听退出动作
# 监听事件
for event in pygame.event.get():
# 判断事件类型是否是退出事件
if event.type == pygame.QUIT:
print("游戏退出...")
# quit 卸载所有的模块
pygame.quit()
# exit() 直接终止当前正在执行的程序
exit()
#第四个窗口,黄色按钮
n4 = True
while n4:
#鼠标监测程序
clock.tick(30)
buttons = pygame.mouse.get_pressed()
x1, y1 = pygame.mouse.get_pos()
if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
start_ck.blit(jixu2, (260, 480))
if buttons[0]:
n4 = False
else:
start_ck.blit(jixu1c, (260, 480))
ck.blit(start_ck,(0,0))
pygame.display.update()
#这里在窗口上写一个标记
myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
textImage=myfont.render("第四窗口",True,white)
start_ck.blit(textImage,(600,560))
# 下面是监听退出动作
# 监听事件
for event in pygame.event.get():
# 判断事件类型是否是退出事件
if event.type == pygame.QUIT:
print("游戏退出...")
# quit 卸载所有的模块
pygame.quit()
# exit() 直接终止当前正在执行的程序
exit()