pygame学习笔记——自己整理(后续更新~)
发布日期:2021-06-30 10:36:50 浏览次数:3 分类:技术文章

本文共 7527 字,大约阅读时间需要 25 分钟。

本篇博客参考崇天老师教程


# Unit PYG02: Pygame Hello World Gameimport pygame,syspygame.init()screen = pygame.display.set_mode((600, 400))pygame.display.set_caption("Pygame游戏之旅")while True:    for event in pygame.event.get():        if event.type == pygame.QUIT:            sys.exit()    pygame.display.update()

 

 

一、最简单案例 

import sys, pygamepygame.init()size = width, height = 320, 200speed = [2, 2]black = 0, 0, 0screen = 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)#返回的是对象,也可以当作 screen 的意思

surface == 红线标出来的窗口)。可以设置填充色等。

ball = pygame.image.load("intro_ball.gif")print(type(ball))

结果:

 

4.ball.get_rect() #返回的是对象,图片转换成矩形对象。

rect对象 == 矩形图片大小的矩形)。有移动等方法。

5.ballrect.move(speed)#speed是坐标,列表表示。ballrect当前的坐标是原点坐标,移到speed的坐标。

也可以理解,横向移动speed[0]个像素,纵向移动speed[1]个像素

Pygame的坐标原点(0,0)点位于左上角,X轴自左向右,Y轴自上向下,单位为像素。

6.一个游戏循环(也可以称为主循环)就做下面这三件事:

  1. 处理事件
  2. 更新游戏状态
  3. 绘制游戏状态到屏幕上

二、视频笔记

1.Rect对象

可以直接更改上面的属性,达到移动rect对象的目的 。

如果时时让图片移动,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, 240speed = [0, 0]black = 0, 0, 0screen = pygame.display.set_mode(size)print(type(screen))ball = pygame.image.load("intro_ball.gif")ballrect = ball.get_rect()ftp = 100fclock = 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, 240speed = [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 = 100fclock = 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, 240speed = [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 = 100fclock = 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, pygamepygame.init()size = width, height = 320, 240speed = [2, 2]black = 0, 0, 0screen = 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, pygamepygame.init()size = width, height = 320, 240speed = [2, 2]black = 0, 0, 0screen = 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, pygamepygame.init()size = width, height = 320, 240speed = [2, 2]black = 0, 0, 0screen = 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.绘制文字

 

 

转载地址:https://it-chengzi.blog.csdn.net/article/details/106247036 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:100种运营人必备工具(网站搜集)
下一篇:python Pygame的具体使用讲解

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月05日 02时00分29秒