Pygame:提高游戏的颜值1

🚴大家好!我是近视的脚踏实地,虽然近视,但是脚踏实地,这一篇来谈谈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 = [
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值