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在进行刷新文章来源:https://www.toymoban.com/news/detail-402434.html
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对象可以用来控制刷新的频率文章来源地址https://www.toymoban.com/news/detail-402434.html
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()
到了这里,关于pygame入门教程-基础篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!