pygame入门教程-基础篇

1. 画布surface

我们先启动一个窗口

import pygame
pygame.init() # 初始化
screen = pygame.display.set_mode((800,600)) # 设置窗口的大小
pygame.display.set_caption("这是一个给我们画画用的窗口") # 设置窗口的title
pygame.quit()

我们通过screen = pygame.display.set_mode((800,600)) 设置了一个窗口,并且返回了一个screen的变量,这个变量的类型是pygame.Surface,也就是一个画布。我们基于这个画布来作画,例如加载一个图片到这个画布上,或者绘制一个圆。

2. 绘制一个圆

我们发现这个窗口一闪而过,什么也没看清。因为加载完变量就释放掉了,我们加一个循环,让其等待10s。

import pygame
import time

pygame.init()
screen = pygame.display.set_mode((800,600))

pygame.display.set_caption("这是一个给我们画画用的窗口")
pygame.draw.circle(screen,(255,0,0),(200,300),20)

for _ in range(10):
    time.sleep(1)

pygame.quit()

可以看到过了10s这个黑框才关闭掉,由于sleep和绘制都在同一个线程中,发现页面会处于卡死状态。同时发现调用pygame.draw.circle绘制的圆也没有出现,这是因为我们没有调用绘制函数。

pygame.draw.circle(Surface, color, pos , raduis, width)

通常情况下,我们会绘制各种各样的图形,如果画一个刷新一个就会导致效率很低,所以一般情况下都是把所有的东西绘制完成之后再统一进行刷新。

import pygame
import time

pygame.init()
screen = pygame.display.set_mode((800,600))

pygame.display.set_caption("这是一个给我们画画用的窗口")
pygame.draw.circle(screen,(255,0,0),(200,300),20)
pygame.draw.circle(screen,(255,0,0),(300,200),20)
pygame.display.update()

for _ in range(10):
    time.sleep(1)


pygame.quit()

3. 绘制变化大小的圆

现在我们想要绘制一个圆,这个圆的大小可以变化,这很简单,只要不断改变圆的半径就可以了。圆的半径变大了,也就是说绘制的内容发生了变化,因此我们需要更新画布

import pygame
import time

pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("这是一个给我们画画用的窗口")

r = 20
for _ in range(10):
    time.sleep(1)
    pygame.draw.circle(screen,(255,0,0),(200,300),r)
    r += 10
	pygame.display.update()

pygame.quit()

等了10s又退出来,反正我们要一直现实,就改成死循环,你会发现圆是变大了,但是程序却退不出来了

r = 20
while True:
    pygame.draw.circle(screen,(255,0,0),(200,300),r)
    r += 1
    pygame.display.update()

pygame.quit() # 由于死循环,所以执行不到这一步

4. 事件

pygame提供了事件来与用户进行交互,例如点击鼠标,打字等等。所有的事件都会放到pygame的事件队列中,我们只要不断读取这个队列就可以了

r = 20
while True:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            pygame.quit()
    pygame.draw.circle(screen,(255,0,0),(200,300),r)
    r += 1
    pygame.display.update()

当我们发现有关闭事件的时候就退出pygame。但是通常不会这么写,直接退出pygame会导致我们有些资源可能来不及释放,所以通常会写成

r = 20
going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going=False
    pygame.draw.circle(screen,(255,0,0),(200,300),r)
    r += 1
    pygame.display.update()
pygame.quit()

5. 刷新率

我们发现这个圆变得太快了,加一个延时缓一缓,例如每隔0.1s在进行刷新

r = 20
going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going=False
    pygame.draw.circle(screen,(255,0,0),(200,300),r)
    r += 1
    pygame.display.update()
    time.sleep(0.1)
pygame.quit()

pygame给我们提供了一个clock对象可以用来控制刷新的频率

clock = pygame.time.Clock() # 创建一个clock对象
r = 20
going = True
while going:
    for event in pygame.event.get():  # 遍历事件
        if event.type == pygame.QUIT:  # 退出事件
            going=False
    pygame.draw.circle(screen,(255,0,0),(200,300),r)
    r += 1
    pygame.display.update()
    clock.tick(10) # 刷新频率为10,也就是1s刷新10次,每个100ms刷新一次
pygame.quit()
PythonPygame写游戏-从入门到精通 中文pdf版本 部分目录如下: 系统学习部分 用PythonPygame写游戏-从入门到精通(1) Pygame的历史,安装Pygame,第一个Pygame脚本 用PythonPygame写游戏-从入门到精通(2) 理解游戏中的事件 用PythonPygame写游戏-从入门到精通(3) Pygmae的屏幕显示PythonPygame写游戏-从入门到精通(4) 使用字体模块,Pygame 的错误处理 用PythonPygame写游戏-从入门到精通(5) 像素和颜色 用PythonPygame写游戏-从入门到精通(6) 使用图像,理解SurfacePythonPygame写游戏-从入门到精通(7) 绘制图形 用PythonPygame写游戏-从入门到精通(8) 产生动画和控制帧率 用PythonPygame写游戏-从入门到精通(9) 向量基础PythonPygame写游戏-从入门到精通(10) 用户输入 用PythonPygame写游戏-从入门到精通(11) 使用鼠标控制精灵。一个在鼠标旁不断游动的小鱼的例程。 用PythonPygame写游戏-从入门到精通(12) 手柄操作,暂无 用PythonPygame写游戏-从入门到精通(13) AI初探 用PythonPygame写游戏-从入门到精通(14) 状态机 用PythonPygame写游戏-从入门到精通(15) 开始AI编程 用PythonPygame写游戏-从入门到精通(16) AI编程总结。一个蚂蚁采集食物,攻击蜘蛛的系统模拟例程。 用PythonPygame写游戏-从入门到精通(17) 3D基础PythonPygame写游戏-从入门到精通(18) 3D中的概念 用PythonPygame写游戏-从入门到精通(19) 第一个 3D 程序(伪)。一个空间中的3D立方体的例程。 用PythonPygame写游戏-从入门到精通(20) 声音原理 用PythonPygame写游戏-从入门到精通(21) 使用声音,播放音效。一个重力模拟金属球碰撞的例程。 用PythonPygame写游戏-从入门到精通(22) 播放长时间的背景音乐。一个建议播放器的例程。 额外提高部分 用PythonPygame写游戏-从入门到精通(py2exe编) 使用py2exe将pygame脚本转换为exe可执行文件 用PythonPygame写游戏-从入门到精通(Sprite) 介绍Pygame中不是必须但又很重要的Sprite模块,游戏中的角色实现,大多都要靠它。 实践部分 用PythonPygame写游戏-从入门到精通(实战一:涂鸦画板1) 一个类似于Windows画图板的小玩意儿,精简了很多功能但是有更帅的笔刷。这一次主要是将笔刷的实现。 用PythonPygame写游戏-从入门到精通(实战一:涂鸦画板2) 加上了按钮,我们的涂鸦画板可以用了! 用PythonPygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块1) 俄罗斯方块,却有不是普通的俄罗斯方块。 用PythonPygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2) 代码构架 用PythonPygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块3) 实现说明 用PythonPygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块4) 完成,提供下载 用PythonPygame写游戏-从入门到精通(实战三:植物大战僵尸1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值