一、个人理解
import sys, pygame
pygame.init()
size = width, height = 320, 200
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
pygame.display.set_caption('Hello World')
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
1.点击窗口的关闭按钮,会触发退出事件,if判断检测到,会出退出窗口。没有下面的代码,窗口关闭不了。
#遍历所有事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
事件都是使用队列存储的。
2.display这个对象,对应的是下面这个显示的窗口(display==显示的窗口),对象有设置标题、窗口大小的方法。
3.pygame.display.set_mode(size)#返回的是Surface对象,也可以当作 screen 的意思
(surface == 红线标出来的窗口)。可以设置填充色等。
ball = pygame.image.load("intro_ball.gif")
print(type(ball))
结果:
<class 'pygame.Surface'>
4.ball.get_rect() #返回的是Rect对象,图片转换成矩形对象。
(rect对象 == 矩形图片)。有移动等方法。
5.ballrect.move(speed)#speed是座标,列表表示。ballrect当前的座标是原点座标,移到speed的座标。
也可以理解,横向移动speed[0]个像素,纵向移动speed[1]个像素
Pygame的座标原点(0,0)点位于左上角,X轴自左向右,Y轴自上向下,单位为像素。
6.一个游戏循环(也可以称为主循环)就做下面这三件事:
- 处理事件
- 更新游戏状态
- 绘制游戏状态到屏幕上
二、视频笔记
1.Rect对象
2.screen.fill(color)
3.screen.blit(src, dest)
4.代码整理预览
5.控制帧率控制画面的切换速度
其实就是根据帧率,计算出每次循环应该等的时间间隔,然后每次执行睡眠对应的时间间隔。
6.键盘控制小球
方向键控制小球的移动方向。小球一直在根据speed的值move,通过时间改变speed的值来改变小球的移动
import sys, pygame
#初始化每个模块的调用
pygame.init()
size = width, height = 320, 240
speed = [0, 0]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
print(type(screen))
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
ftp = 100
fclock = pygame.time.Clock()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
speed[1] = -1 #小球向上移动
speed[0] = 0 #小球左右不移动
elif event.key == pygame.K_DOWN:
speed[1] = 1 #小球向下移动
speed[0] = 0 #小球左右不移动
elif event.key == pygame.K_LEFT:
speed[0] = -1 #小球向左移动
speed[1] = 0 #小球上下不移动
elif event.key == pygame.K_RIGHT:
speed[0] = 1 #小球向右移动
speed[1] = 0 #小球上下不移动
ballrect = ballrect.move(speed)
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
fclock.tick(ftp)
7.屏幕的相关设置
全屏显示,按ESC退出
import sys, pygame
#初始化每个模块的调用
pygame.init()
#获取屏幕的信息
vInfo = pygame.display.Info()
#获取屏幕的宽度和高度
size = width,height = vInfo.current_w ,vInfo.current_h
#size = width, height = 320, 240
speed = [0, 0]
black = 0, 0, 0
#设置屏幕模式为全屏
screen = pygame.display.set_mode(size,pygame.FULLSCREEN)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
ftp = 100
fclock = pygame.time.Clock()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
speed[1] = -1 #小球向上移动
speed[0] = 0 #小球左右不移动
elif event.key == pygame.K_DOWN:
speed[1] = 1 #小球向下移动
speed[0] = 0 #小球左右不移动
elif event.key == pygame.K_LEFT:
speed[0] = -1 #小球向左移动
speed[1] = 0 #小球上下不移动
elif event.key == pygame.K_RIGHT:
speed[0] = 1 #小球向右移动
speed[1] = 0 #小球上下不移动
elif event.key == pygame.K_ESCAPE:#当全屏的时候,需要按键ESC退出
sys.exit()
ballrect = ballrect.move(speed)
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
fclock.tick(ftp)
窗口可以随意的拖动改变大小。
import sys, pygame
#初始化每个模块的调用
pygame.init()
#获取屏幕的信息
vInfo = pygame.display.Info()
#获取屏幕的宽度和高度
size = width,height = vInfo.current_w ,vInfo.current_h
#size = width, height = 320, 240
speed = [0, 0]
black = 0, 0, 0
#设置屏幕模式为全屏
screen = pygame.display.set_mode(size,pygame.RESIZABLE)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
ftp = 100
fclock = pygame.time.Clock()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
speed[1] = -1 #小球向上移动
speed[0] = 0 #小球左右不移动
elif event.key == pygame.K_DOWN:
speed[1] = 1 #小球向下移动
speed[0] = 0 #小球左右不移动
elif event.key == pygame.K_LEFT:
speed[0] = -1 #小球向左移动
speed[1] = 0 #小球上下不移动
elif event.key == pygame.K_RIGHT:
speed[0] = 1 #小球向右移动
speed[1] = 0 #小球上下不移动
elif event.key == pygame.K_ESCAPE:#当全屏的时候,需要按键ESC退出
sys.exit()
elif event.type == pygame.VIDEORESIZE:#检测窗口变化事件
size = event.size[0],event.size[1]#获取最新的窗口大小
screen = pygame.display.set_mode(size, pygame.RESIZABLE)#重新设置窗口模式
ballrect = ballrect.move(speed)
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
fclock.tick(ftp)
关闭窗口,游戏停止
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
if pygame.display.get_active():#窗口关闭就不移动了
ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
filp()是更新全部
update()是更新变化的地方
8.事件
测试事件的三个属性,打印出来
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.unicode == "":
print("#",event.key,event.mod)
else:
print(event.unicode,event.key,event.mod)
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
import sys, pygame
pygame.init()
size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
speed[0] = event.pos[0]
speed[1] = event.pos[1]
ballrect = ballrect.move(speed)
screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()
#创建一个事件,添加到队列中
uevent = pygame.event.Event(pygame.KEYDOWN,{'nuicode':123,'key':pygame.K_SPACE,'mod':0})
pygame.event.post(uevent)
9.颜色
10.画图
11.绘制文字