Pygame游戏框架

1.1、安装pygame

pip install pygame

验证是否安装成功。
在IDLE里输入以下命令,如果输出pygame的版本信息,则说明安装成功

import pygame
pygame.ver

1.2、Pygame常用模块

模块名 功能
pygame.cdrom 访问光驱
pygame.cursors 加载光驱
pygame.display 访问显示设备
pygame.draw 绘制形状、线和点
pygame.event 管理事件
pygame.font 使用字体
pygame.image 加载和存储图片
pygame.joystick 使用游戏手柄或者类似的东西
pygame.key 读取键盘按键
pygame. mixer 声音
pygame.mouse 鼠标
pygame.movie 播放视频
pygame.overlay 访问高级视频叠加
pygame.rect 管理矩形区域
pygame.sndarray 操作声音数据
pygame.sprite 操作移动图像
pygame.surface 管理图像和屏幕
pygame.surfarray 管理点阵图像数据
pygame.time 管理时间和帧信息
pygame.transform 缩放和移动图片

利用display和event模块创建一个Pygame窗口,代码如下

# -*- coding: utf-8 -*-
import sys
import pygame

pygame.init()   # 初始化Pygame
size = width, height = 320, 240  # 设置窗口
screen = pygame.display.set_mode(size)  # 显示窗口

# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    for event in pygame.event.get():  # 遍历所有事件
        if event.type == pygame.QUIT:   # 如果单击关闭窗口,则退出
            sys.exit()
pygame.quit()   # 退出Pygame

下面对代码进行一些解释,
pygame.event.get()能获取时间的队列,然后利用一个死循环,再根据type属性判断事件的类型,如event.type == pygame.QUIT表示,检测到关闭Pygame窗口的事件,pygame.KEYDOWN表示键盘按下事件等等

display模块的常用方法

方法名 功能
pygame.display.init 初始化display模块
pygame.display.quit 退出diaplay模块
pygame.display.set_mode 初始化一个准备显示的界面
pygame.display.set_init 如果display模块以及初始化,则返回True
pygame.display.get_syrface 获取当前的Surface模块
pygame.display.flip 更新整个待显示的Surface对象到屏幕上
pygame.display.update 更新部分内容显示到屏幕上,如果没有参数,则与flip方法的功能相同

1.3、制作小球跳跃游戏

1.31、添加给窗口添加小球

我们先准一张ball.jpg图片,然后加载该图片,代码如下

# -*- coding: utf-8 -*-
import sys, pygame
pygame.init()   # 初始化 Pygame
size = width, height = 640, 480  # 设置窗口
screen = pygame.display.set_mode(size)      # 显示窗口
color = (255, 255, 255)  # 设置颜色

ball = pygame.image.load("ball.png")  # 加载图片
ballrect = ball.get_rect()  # 获取矩形框

# 执行死循环
while True:
    # 检查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出
            sys.exit()

    screen.fill(color)   # 填充颜色
    screen.blit(ball, ballrect)   # 将图片画到窗口上面去
    pygame.display.flip()         # 更新全部显示

pygame.quit()     # 退出Pygame
Surface 对象的常用方法名 功能
pygame.Surface.blit 将一幅画像画到另一幅图像像
pygame.Surface.convert 转换图像的像素格式
pygame.Surface.convert_alpha 转换图像的像素格式,包含Alpha通道的转换
pygame.Surface.fill 使用颜色填充Surface
pygame.Surface.get_rect 获取Surface的矩形区域

1.32、让小球动起来

通过ball.get_rect()方法的返回值bllrectt的一个move()方法让矩形移动。
move(x,y) x表示X轴移动的距离,y表示Y轴移动的距离。窗口左上角座标为(0,0)

加个while循环,让小球不断的移动起来

# -*- coding=utf8 -*-
import sys
import pygame
pygame.init()  # 初始化Pygame
size = width, height = 1000, 650  # 设置窗口
screen = pygame.display.set_mode(size)  # 显示窗口
color = (255, 255, 255)  # 设置颜色

ball = pygame.image.load("ball.jpg")  # 加载图片
ballrect = ball.get_rect()  # 获取矩形区域

speed = [5,5]  # 设置移动的X轴、Y轴的距离
# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:    # 如果单击关闭窗口,则退出
            sys.exit()

    ballrect = ballrect.move(speed)  # 移动小球
    screen.fill(color)  # 填充小球
    screen.blit(ball, ballrect)  # 将图片画到窗口上
    pygame.display.flip()     # 更新全部显示

pygame.quit()  # 退出Pygame

1.33、增加碰撞检测的功能

在1.32中我们发现小球在窗口中一闪而过,这时我们就需要添加碰撞检测功能了

# -*- coding=utf8 -*-
import sys
import pygame
pygame.init()  # 初始化Pygame
size = width, height = 1000, 650  # 设置窗口
screen = pygame.display.set_mode(size)  # 显示窗口
color = (255, 255, 255)  # 设置颜色

ball = pygame.image.load("ball.jpg")  # 加载图片
ballrect = ball.get_rect()  # 获取矩形区域

speed = [2, 2]  # 设置移动的X轴、Y轴的距离
# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    for event in pygame.event.get():
        if event.type == 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)  # 将图片画到窗口上
    pygame.display.flip()     # 更新全部显示

pygame.quit()  # 退出Pygame

1.34、设置时钟,控制运行时间

# -*- coding=utf8 -*-
import sys
import pygame
pygame.init()  # 初始化Pygame
size = width, height = 1000, 650  # 设置窗口
screen = pygame.display.set_mode(size)  # 显示窗口
color = (255, 255, 255)  # 设置颜色

ball = pygame.image.load("ball.jpg")  # 加载图片
ballrect = ball.get_rect()  # 获取矩形区域

speed = [5, 5]  # 设置移动的X轴、Y轴的距离
clock = pygame.time.Clock()   # 设置时钟
# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    clock.tick(60)       # 每秒执行60次
    for event in pygame.event.get():
        if event.type == 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)  # 将图片画到窗口上
    pygame.display.flip()     # 更新全部显示

pygame.quit()  # 退出Pygame
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章