当前位置: 首页 > article >正文

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

文章目录

    • load
    • 转换和存储
    • 自由落体

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

load

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

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

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

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还提供了图像与字符串、字节数组的转换方法

字符串字节数组
tostringtobytes
fromstringfrombytesfrombuffer

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

位数类型
P8位调色盘图像
RGB24位RGB图像
RGBX32位RGB和一个空通道
RGBA32RGB和透明图层
ARGB32透明和RGB图层
BGRA32BGR和透明图层
RGBA_PREMULT32RGBA格式中,A通道用于放缩RGB
ARGB_PREMULT32ARGB格式中,A通道用于放缩RGB

示例如下

p = pygame.image.tostring(ball, "P")
rgb = pygame.image.tostring(ball, "RGB")
len(p)      # 12321
len(rgb)    # 36963

二者可以重新变回图像

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=y021gt2,考虑到动画生成采取的是差分的逻辑,所以设 v n = v n − 1 + 1 v_n=v_{n-1}+1 vn=vn1+1,则代码如下

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()

效果如下

在这里插入图片描述


http://www.kler.cn/a/145982.html

相关文章:

  • Axios 封装:处理重复调用与内容覆盖问题
  • 疑难Tips:解决 SQL*Plus 中工具插入中文数据到Oracle数据库报错及乱码问题
  • 【错误解决方案记录】spine3.8.75导出的数据使用unity-spine3.8插件解析失败报错的解决方案
  • TP4056锂电池充放电芯片教程文章详解·内置驱动电路资源!!!
  • Nginx:通过upstream进行代理转发
  • git操作
  • 第十七周周报-王雲慧
  • MongoDB使用$literal获取表达式字面值
  • 案例030:基于微信小程序的英语学习交流平台
  • Spring Cache框架,实现了基于注解的缓存功能。
  • 【洛谷算法题】P5715-三位数排序【入门2分支结构】
  • Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持
  • Nginx 学习笔记
  • 27. Spring源码篇之SpEL表达式之自定义解析模版
  • leetcode 最大整除子集
  • 【网络奇幻之旅】那年我与大数据的邂逅
  • VMWare虚拟机ubuntu克隆打不开
  • 如果客户端同时有ipv4和ipv6,浏览器是如何选择用哪种ip
  • Ubuntu20.04清理垃圾vscode缓存
  • ChatGPT初体验:注册、API Key获取与ChatAPI调用详解
  • RT-DETR论文阅读笔记(包括YOLO版本训练和官方版本训练)
  • PTA NeuDS-数据库题目集
  • 手把手教会你--渗透实战--Hack The Box-Starting Point-Meow--持续更新
  • MT6893_天玑 1200芯片规格参数介绍_datasheet规格书
  • 【深度学习】因果推断与机器学习的高级实践 | 数学建模
  • Rust语言入门教程(八) - 引用与借用