python制作跳跃的小球

11.1.安装pygame库

pip install pygame

11.2.加载模块初始化

import sys
import  pygame

pygame.init()   #初始化pygame

11.3.创建窗口

  • 作用:创建游戏窗口
  • 常见的内置方法:
方法 作用
pygame.dispaly. init() 初始化display

pygame.dispaly. quit()

结束display模块
pygame.dispaly. get_init() 判断是否初始化
pygame.dispaly. get.surface() 获取当前surface对象
pygame.dispaly. flip() 更新显示
pygame.dispaly. update() 更新部分内容显示到屏幕
pygame.dispaly. set_mode() 初始化一个准备显示的界面
import sys
import pygame

pygame.init()   #初始化pygame

size=width,height=640*800
screen=pygame.display.set_mode(size)    #显示窗口

上述程序运行,会出现一个一闪而过的黑色窗口,原因是执行会立即关闭,若要一直显示,应使用循环显示的手段来实现

import sys
import pygame

pygame.init()   #初始化pygame

size=width,height=640,800
screen=pygame.display.set_mode(size)    #显示窗口

#执行一个死循环,确保窗口一直存在,知道手动关闭(点击x)
while True:
    #检查事件显示窗口也是一个事件,点击关闭也是一个事件
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()

上述代码中,添加了轮询事件,pygame.even.get()可以获取事件队列,使用for....in遍历事件,再根据type属性判断事件类型是否属于关闭事件

11.4.添加小球

11.4.1.image模块

  • 作用:pygame图像传输模块
  • 常用方法:
方法 作用
pygame.image.load()  从文件加载图片
pygame.image. save() 将图片保存到磁盘
pygame.image. get_extended() 检查是否支持载入扩展的图像格式
pygame.image. tostring() 将图像转为字符串
pygame.image. fromstring() 将字符串转为图像
  • 支持的图片格式:jpg,png,gif,bmp,pcx等
  • 注意:当一个图像成功载入会转为surface对象,该对象允许二次

11.5.处理surface对象

11.5.1.image.load()方法加载图片后返回一个surface对象,其就是表示图片,可以二次处理如:涂画、变形、赋值等操作

11.5.2.常用方法:

方法

作用

pygame.Surface. blit() 将图像绘制到另一个图像上
pygame.Surface. convert() 转为像素格式
pygame.Surface. fill() 使用颜色填充区域
pygame.Surface. get_rect() 获取surface对象的矩形区域
import sys
import pygame

pygame.init()   #初始化pygame

size=width,height=640,800
screen=pygame.display.set_mode(size)    #显示窗口
color=(0,0,0)   #设置颜色

ball=pygame.image.load('ball.png')  #加载小球图片,但不现实
ballrect=ball.get_rect()    #获取矩形区域,其实就会小球图片所占区域,只不过没有内容

#执行一个死循环,确保窗口一直存在,知道手动关闭(点击x)
while True:
    #检查事件显示窗口也是一个事件,点击关闭也是一个事件
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()

    screen.fill(color)
    screen.blit(ball,ballrect)  #将ball图片填到屏幕矩形区域上
    pygame.display.flip()

11.6.移动小球

11.6.1.小球ball移动使用move()方法,move(x,y)表示x轴和y轴的移动距离,左上角(0,0),可设置move(5,5)

import sys
import pygame

pygame.init()   #初始化pygame

size=width,height=640,800
screen=pygame.display.set_mode(size)    #显示窗口
color=(0,0,0)   #设置颜色

ball=pygame.image.load('ball.png')  #加载小球图片,但不现实
ballrect=ball.get_rect()    #获取矩形区域,其实就会小球图片所占区域,只不过没有内容

#执行一个死循环,确保窗口一直存在,知道手动关闭(点击x)
while True:
    #检查事件显示窗口也是一个事件,点击关闭也是一个事件
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    ballrect=ballrect.move(5,5)

    screen.fill(color)
    screen.blit(ball,ballrect)  #将ball图片填到屏幕矩形区域上
    pygame.display.flip()   #刷新显示

11.6.2.上例程序发现小球移动太快,一闪而过,原因试运行时间太短了,导致肉眼观察出现错觉,因此需要设计一个时钟来控制程序运行事件

11.6.3.pygame.time模块

import sys
import pygame

pygame.init()   #初始化pygame

size=width,height=640,800
screen=pygame.display.set_mode(size)    #显示窗口
color=(0,0,0)   #设置颜色

ball=pygame.image.load('ball.gif')  #加载小球图片,但不现实
ballrect=ball.get_rect()    #获取矩形区域,其实就会小球图片所占区域,只不过没有内容
clock=pygame.time.Clock()   #创建时钟

#执行一个死循环,确保窗口一直存在,知道手动关闭(点击x)
while True:
    clock.tick(60)  #更新时钟,每秒60次
    #检查事件显示窗口也是一个事件,点击关闭也是一个事件
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    ballrect=ballrect.move(5,5)

    screen.fill(color)
    screen.blit(ball,ballrect)  #将ball图片填到屏幕矩形区域上
    pygame.display.flip()   #刷新显示
  • 作用:监控时间模块
  • 常用方法:
方法 作用
pygame.time. get_ticks() 获取以毫秒为单位的时间
pygame.time. wait() 暂停执行一段时间
pygame.time. set_timer() 在事件队列上重复创建一个事件
pygame.time. Clock() 创建一个对象来帮助跟踪时间

11.7.碰撞检测

上例中小球移动后消失,表示移动到窗口之外,所以需要增加碰撞检测,即小球与窗体任意一边的边缘发生碰撞了则更改小球的移动方向

import sys
import pygame

pygame.init()   #初始化pygame

size=width,height=640,800
screen=pygame.display.set_mode(size)    #显示窗口
color=(0,0,0)   #设置颜色

ball=pygame.image.load('ball.gif')  #加载小球图片,但不现实
ballrect=ball.get_rect()    #获取矩形区域,其实就会小球图片所占区域,只不过没有内容
clock=pygame.time.Clock()   #创建时钟
speed=[5,5]     #设置移动的x、y轴


#执行一个死循环,确保窗口一直存在,知道手动关闭(点击x)
while True:
    clock.tick(60)  #更新时钟,每秒60次
    #检查事件显示窗口也是一个事件,点击关闭也是一个事件
    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(color)
    screen.blit(ball,ballrect)  #将ball图片填到屏幕矩形区域上
    pygame.display.flip()   #刷新显示

猜你喜欢

转载自blog.csdn.net/weixin_64311421/article/details/128134126