文章目录
🚴大家好!我是近视的脚踏实地,虽然近视,但是脚踏实地,这一篇来谈谈Pygame的事件。下面就来谈谈如何提高Pygame游戏的颜值
display模块的 set_mode(resolution = (0, 0), flags = 0, depth = 0)方法详解
⚠️set_mode(resolution = (0, 0), flags = 0, depth = 0) —> Surface⚠️
我们一直通过display模块的 set_mode() 方法来指定界面的大小,这个方法会返回一个Surface对象,然后我们就用这个Surface对象作为界面,可以看到方法有三个参数。
※参数resolution
首先是resolution参数,用于指定界面的大小,如果你什么都不给的话,就会使用默认的(0,0),那么pygaem会根据当前的屏幕分辨率来创建一个窗口,❗️但是要注意,这一功能只有在SDL高于或者等于1.2.10的时候才会实现,如果是低于这个版本号的话,那么就会抛出异常❗️,所以一般第一个参数我们还是指定比较好
※参数flags
第二个参数 flags 是指定扩展选项,如果要同时指定多组选项可以使用 管道操作符 “|”, 那么 flags 参数有如下提供的几个可选项:
※参数depth
第三个参数 depth 用于指定颜色的位数,一般不推荐自己设置,Pygame 会根据当前的操作系统去取一个最合适的值。
大家在玩游戏的时候应该会发现😏,比如LOL,穿越火线,很多游戏他都是全屏模式的,不全屏还不给玩,这是为啥?🤔,因为全屏的好处有太多了,第一,你可以显示更多的内容,第二可以开启硬件加速,最重要的一点是,整个程序你霸占了整个屏幕,其他的软件都一边站去,没他们什么事,
创建全屏模式的窗口
全屏模式在Pygame中非常简单,只需要将第二个参数设置为 FULLSCREEN 即可,同时,我们还可以加上硬件加速。我们需要一个按钮来控制退出全屏,否则全屏了,没有退出就GG了,所以我们要来关联一个快捷键,使得我们的全屏得到控制
※版本一
直接拿之前的代码来修改
import pygame
import sys
from pygame.locals import *
# 初始化Pygame
pygame.init()
size = width, height = 600, 400
speed = [-2, 1]
bg = (255, 255, 255) # RGB
fullscreen = False
#实例化Clock对象
clock = pygame.time.Clock()
# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")
# 加载图片 Surface
turtle = pygame.image.load("turtle.png")
# 获得图像的位置矩形
position = turtle.get_rect()
l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
turtle = l_head
speed = [-1,0]
if event.key == K_RIGHT:
turtle = r_head
speed = [1,0]
if event.key == K_UP:
speed = [0,-1]
if event.key == K_DOWN:
speed = [0,1]
#全屏(F11)
if event.key == K_F11:
fullscreen = not fullscreen
if fullscreen:
screen = pygame.display.set_mode((1600,900),FULLSCREEN | HWSURFACE)
else:
screen = pygame.display.set_mode(size)
# 移动图像
position = position.move(speed)
if position.left < 0 or position.right > width:
# 翻转图像
turtle = pygame.transform.flip(turtle, True, False)
# 反方向移动
speed[0] = -speed[0]
if position.top < 0 or position.bottom > height:
speed[1] = -speed[1]
# 填充背景
screen.fill(bg)
# 更新图像
screen.blit(turtle, position)
# 更新界面
pygame.display.flip()
# 延迟10毫秒
#pygame.time.delay(10)
clock.tick(100)
(解析:首先在KEYDOWN事件的判断下加一个控制全屏的按钮(F11),然后这里先在上面设置一个标志fullscreen = False,表示默认不全屏,那么当按下F11的时候fullscreen = not fullscreen,就取反,Flase变True,再次按下就又变回False,如果是True,那么创建一个全屏窗口和普通窗口没什么区别,但是你的尺寸要改一下,screen = pygame.display.set_mode((1920, 1080),FULLSCREEN | HWSURFACE),第一个参数就是自己电脑的尺寸,第二是设置flags参数,设置为全屏和硬件加速就OK了)
※(修改版本一的bug)版本二
首先上面的截图我也不知道啥回事😥,自己运行的时候是真正全屏的,而且老污龟🐢的龟头不会进到墙里边的,应该是截图的工具的问题,那么现在他的主要bug就是虽然改变了到了全屏,但是他移动范围还是之前的那个窗口的尺寸,在原来的窗口边界就掉头了
修改思路就是:第一当按下F11全屏的时候,相应地修改width,和height的值,再次按下F11退出全屏的时候,把width和height恢复为原来的尺寸
当然这样仍然有bug,如果全屏的时候老污龟跑到原本窗口外,在按F11回来时,老污龟就不见了,回不来了,所以第二个就是先去前面做个初始位置的备份,oturtle_rect表示的是初始化时矩形的位置,即老污龟的位置
接着回来再做个判断,如果按下F11回到原始窗口的时候,老污龟的位置刚好在初始化窗口的范围内,就不用复位了,直接把width,和height的值修改为size就好了,如果恢复时,不在原始窗口范围内,那就需要复位了
下面是完整的源码👇
import pygame
import sys
from pygame.locals import *
# 初始化Pygame
pygame.init()
size = width, height = 600, 400
speed = [-2, 1]
bg = (255, 255, 255) # RGB
fullscreen = False
#实例化Clock对象
clock = pygame.time.Clock()
# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")
# 加载图片 Surface
turtle = pygame.image.load("turtle.png")
# 获得图像的位置矩形
oturtle_rect = turtle.get_rect()
#保存这个初始位置,等等复位用到
position = oturtle_rect
l_head = turtle
r_head = pygame.transform.flip(turtle, True, False)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
turtle = l_head
speed = [