Pygame:初次见面,请大家多多关照

本文详细介绍如何在Python环境中安装Pygame模块,解决安装过程中可能遇到的网络超时问题,并提供快速入门实例,展示如何绘制图形、显示图片、实现动画效果等核心功能。

※安装pygame

python中提到游戏开发, 那就肯定非Pygame 莫属了,Pygame 是一个利用 SDL 库实现的模块,我们先来安装Pygame。

1、安装及可能遇到的问题

   直接打开CMD,输入 pip install Pygame,回车
(这里就有可能出现超时错误(socket.timeout: The read operation timed out和pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443): Read timed out.)

😳原因是:国内网络下载python包很慢
    解决方案一:设置 default-timeout为100,或者更长,如下:

pip install --default-timeout=100 Pygame

    (优)解决方案二:使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple,这个是清华大学的pip源,它是官网pypi的镜像,这样他就会从清华那边的镜像去安装Pygame库。如下:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Pygame

在这里插入图片描述
   接着打开IDLE验证如下显示就说明安装成功了😉
在这里插入图片描述

2、pygame功能简介

   Pygame 作为一个游戏模块,主要具备以下功能

        ❤ 绘制图形:能够绘制圆形、三角形、菱形、矩形这所有我们想象得到的图形,跟跟我们的tkinter一样,能够绘制这些图形
        ❤ 显示图片:素材就是以图片的形式提供的,需要把它们显示出来。
        ❤ 动画效果。
        ❤ 能够与键盘、鼠标和游戏手柄等外设交互。
        ❤ 播放声音:例如诈弹爆炸啊
        ❤ 支持碰撞检测

※快速入门

import pygame
import sys

# 初始化Pygame
pygame.init()

size = width, height = 600, 400
speed = [-2, 1]
bg = (255, 255, 255) # RGB

# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("初次见面,请大家多多关照!")

# 加载图片
turtle = pygame.image.load("turtle.png")
# 获得图像的位置矩形
position = turtle.get_rect()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    # 移动图像
    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)

   🉐运行效果如下:
在这里插入图片描述
注意‼️:如果是用IDLE直接运行的,当点右上角关闭,是关不了的,只是停住了,因为 pygame 的事件循环和 IDLE 的 tkinter 事件循环是冲突的,如果是直接双击运行这个.py文件,就可以正常关闭

(分析:首先就是 import pygame和import sys ,sys是退出程序要用的。

接着第一个要做的就是pygame.init()初始化pygame,因为 pygame 事实上是一个包,是个package,一个包里面包含了各种不同功能的模块,init() 就是初始化这些模块,让它们做好准备,随时待命,事实上就是做一些硬件初始化工作

下面接下来是一些变量的设置,先暂时不管它们,接着往下看。

接着是调用display.set_mode(side) 方法创建指定大小的窗口,这个side就是上面定义好的变量否,宽600,高400,然后赋给左边的width和height,事实上这个side是个元组,那么这个方法创建之后他会返回一个Surface的对象,这里是把他当做背景画布,后边会为他填充纯白色,

然后就是调用display.set_caption设置窗口的标题。

接着就是调用image.load方法加载图片,这个加载图片方法相对于tkinter要厚道很多,因为这个方法图片的加载不仅支持gif格式,还支持时下最流行的jpg,png等流行的图片格式。图片加载成功后pygame会帮你将图片转化为一个Surface对象,

那么我们想要让小乌龟移动,事实上就是修改Surface对象的位置,每一个Surface对象他都有一个rect矩形对象,他用表示这个Surface的矩形区域的位置和大小信息,

所以接下来就是调用get_rect() 方法来获得图片的位置矩形,把它赋值为一个position的变量,接下会在循环里边改变他

接下来就是进入一个死循环,这个死循环的作用就是可以让程序可以持续不断的运行,当小乌龟跑来跑去他不会停,学过界面编程都知道事件,在Pygame中,用户的一切行为都会变成一个个的事件消息,放入事件队列中。在这里我们就算通过一个迭代,从事件队列中获取一个事件,然后检测这个事件是不是quit,就算按下右上角的X,他就会传入quit事件,然后调用sys.exit(),就退出程序

然后再循环里面就是移动图像,调用position的move方法,再重新赋给position,事实上就是重新修改他的位置,因为rect矩形(刚刚赋给了position变量)对象他有个move方法,move方法传入他的偏移位置,speed就是前面定义好的变量,意思是就是x轴偏移-2,就水平位置每一次减2,y轴道理相似,这事实上就是修改矩形的位置。

下面的两段就是检测他是不是位于窗口的边界之外,所以这里是通过position.left检测他小于0,因为坐标系左上角是(0,0),右下角是我们的(600,400),所以说如果左边小于0,那么它跑到左边以外了,如果说右边大于width,就说明跑到右边了,下面就是检测顶端和低端的,只要它不出界就可以了,出界就反方向移动, speed[0] = -speed[0]把它变成相反数,-2就变成+2,1就变成-1,然后这里还调用了transform.flip(turtle, True, False)方法翻转图片,就是水平翻转,第一参数就是传入Surface对象,第二个是设置是否水平翻转,第三参数是设置是否垂直翻转,这里只需要水平翻转就好了

最后那几行第一个就是fill填充这个背景,bg参数就是之前设置好的变量,是一个元组,是一个三元组,事实上就是RGB(red green blue)颜色,三个都等于255时表示白色,然后再调用blit方法,参数就把乌龟这个Surface对象画到这个 screen Surface对象上去。事实上这个Surface的blit方法就是将一个图像画到另一个图像上面去,画在哪,画多大就看position参数,position是个矩形的对象

最后我们要做的就是调用display.flip刷新画面,因为Pygame采用的是双缓冲模式,因此我们需要调用这个方法将缓冲好的画面一次性刷新到显示器上,所谓的双缓冲就是在内存中建立一个与屏幕绘制区域一摸一样的对象,上面的fill和blit方法就是将我们的数据写到内存中的对象里边去,然后全部写完之后调用flip,把这个写好的对象一次性放到屏幕上,这样做的好处就是大大加快了绘图的速度,以为避免闪烁现象,因为说你这个绘图比较复杂的情况下,这边绘三角形,那么绘正方形,中间绘个椭圆行,那肯定会出现一些小部分的闪烁,因为他频率太高,如果采用这个双缓冲模式,一次性就把一张图片刷上来,就不会出现闪烁现象了,

最最后就是调用time.delay(10)延迟一下,如果说没有延迟,小乌龟就会发疯了吗,跑得超级快😂😂)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值