pygame加载图像,并让小球做平抛运动

文章目录

在游戏设计中,图像显示是必不可少的功能,pygame中的image模块便用于加载图像。

load

通过load函数,可以加载多种图像格式,如下表所示

旧版本 bmp, gpeg, png, pcx, tiff, xpmc, lbm(以及pbm, pgm, ppm)
有条件支持 非动画gif;非压缩tga;svg
2.0新增 pnm, webp, svg

下面就演示一下load加载图像的示例

python 复制代码
import pygame

pygame.init()
screen = pygame.display.set_mode((500,300))

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

while True:
    if pygame.QUIT in [e.type for e in pygame.event.get()]:
        pygame.quit()
        break
    screen.blit(ball, ballrect)
    pygame.display.flip()

其中intro_ball.gif是pygame的一张示例图像,位于pygame路径下的docs\generated\_images文件夹中。

ballrect是一个框住了ball的矩形。在后面的死循环中,通过ballrect来设置ball的位置。

效果如下

转换和存储

通过save函数,可将图像另存为BMP, JPEG, PNG, TGA四种格式。此外,pygame还提供了图像与字符串、字节数组的转换方法

字符串 字节数组
tostring tobytes
fromstring frombytes frombuffer

在数据转换过程中,需要指明图像的颜色格式,列表如下

位数 类型
P 8位 调色盘图像
RGB 24位 RGB图像
RGBX 32位 RGB和一个空通道
RGBA 32 RGB和透明图层
ARGB 32 透明和RGB图层
BGRA 32 BGR和透明图层
RGBA_PREMULT 32 RGBA格式中,A通道用于放缩RGB
ARGB_PREMULT 32 ARGB格式中,A通道用于放缩RGB

示例如下

python 复制代码
p = pygame.image.tostring(ball, "P")
rgb = pygame.image.tostring(ball, "RGB")
len(p)      # 12321
len(rgb)    # 36963

二者可以重新变回图像

python 复制代码
pIm = pygame.image.fromstring(p, (111,111), "P")
rgbIm = pygame.image.fromstring(rgb, (111,111), "RGB")
pygame.image.save(pIm, "pIm.png")
pygame.image.save(rgbIm, "rgbIm.png")

自由落体

下面用pygame来演示一下小球的自由落体动画。自由落体的方程是个高中生就会 y = y 0 − 1 2 g t 2 y=y_0-\frac{1}{2}gt^2 y=y0−21gt2,考虑到动画生成采取的是差分的逻辑,所以设 v n = v n − 1 + 1 v_n=v_{n-1}+1 vn=vn−1+1,则代码如下

python 复制代码
import time

pygame.init()

size = width, height = 640, 320
speed = [10, 0]

screen = pygame.display.set_mode(size)

ball = pygame.image.load("intro_ball.gif")
rect = ball.get_rect()

while True:
    if pygame.QUIT in [e.type for e in pygame.event.get()]:
        break
    time.sleep(0.02)
    rect = rect.move(speed)
    if rect.right>width:
        speed = [10, 0]
        rect = ball.get_rect()
    if rect.bottom>height:
        speed[1] = -speed[1]
    speed[1] += 1
    screen.fill("black")
    screen.blit(ball, rect)
    pygame.display.flip()

pygame.quit()

效果如下

相关推荐
阿_旭3 分钟前
基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·毕业设计·logo检测
SomeB1oody4 分钟前
【Python机器学习】1.9. 逻辑回归实战(进阶):建立二阶边界模型
人工智能·python·机器学习·ai·逻辑回归
go546315846510 分钟前
简单的 Python 示例,用于生成电影解说视频的第一人称独白解说文案
开发语言·python
YueiL13 分钟前
OpenCV 颜色空间:原理与操作指南
python·opencv
vvilkim14 分钟前
使用 JavaScript 和 HTML5 实现强大的表单验证
开发语言·javascript·html5
程高兴1 小时前
中性点不接地系统单相接地故障Matlab仿真
开发语言·matlab
AI很强1 小时前
matlab常见的配图代码实现1
开发语言·算法·matlab
鲤籽鲲1 小时前
C# Enumerable类 之 数据排序
开发语言·c#·c# 知识捡漏
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧1 小时前
C语言_数据结构总结6:链式栈
c语言·开发语言·数据结构·算法·链表·visualstudio·visual studio
IT猿手2 小时前
2025最新群智能优化算法:云漂移优化(Cloud Drift Optimization,CDO)算法求解23个经典函数测试集,MATLAB
开发语言·数据库·算法·数学建模·matlab·机器人