1. 画布surface
我们先启动一个窗口
import pygame
pygame.init()
screen = pygame.display.set_mode((800,600))
pygame.display.set_caption("这是一个给我们画画用的窗口")
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()
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)
pygame.quit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)