环境:树莓派,系统raspbian,系统自带两个版本的python以及pygame。

1、画板

程序如下:

 !/home/pi/game_1.py
import pygame width = 640
height = 480
radius = 100
fill = 1 pygame.init() #初始化pygame window = pygame.display.set_mode((window, height))
window.fill(pygame.Color(255, 255, 255)) # 用白色填充画板
while True:
pygame.draw.circle(window, pygame.Color(255, 0, 0),
(width / 2, height / 2), radius, fill) # 红色画圆
pygame.display.update() # 更新图像

输入命令:python game_1.py

运行程序,结果如下:

键盘输入:ctrl + c

终止程序。

然而,由于树莓派图形界面的卡爆,返回到命令窗口再ctrl + c有时候会卡掉,不如直接在pygame窗口上操作来的爽快,其实pygame窗口就是用gui编程的,类似于tkinter模块做成的gui,那么关掉窗口就需要事件输入反应,在原来的game_1.py文件后面加入代码:

 while True:
if pygame.QUIT in [e.type for e in pygame.event.get()]:
break

我发现树莓派连接网络这方面真是慢,插上电源启动网络若干分钟才能SSH连接到树莓派ip,至于访问外网,时有时无,有时候由于某种故障,例如长时间不动树莓派或者重启wifi就会导致网络连接失败,putty成为inactive,这个时候只有重新拔插电源才能正常,否则直接SSH会显示time out,只能说没有HDMI线就是麻烦,一重启网络或者重启电脑就会出错。

2、Surface

Surface可想象成一个矩形的图像,可以由多个图像帧组成,用于实现游戏或动画中一个场景,接下来要做的就是合并两张图片。

tips:由于这里需要图片,因此在购买了HDMI转换器后,使用网络还是很方便的,首先方便传图,下载了scrot,下载后直接在命令行输入:scrot即可截取当前屏幕图片,也可以通过输入:scrot -h命令查看帮助文档,比如选择截图范围就可以输入:scrot -s就可以截取想要的图片范围了,保存的图片放在当前路径下,可以使用pi里面自带的picture viewer查看图片。

程序如下:

 import pygame

 pygame.init()
#设置黑色背景surface大小
screen = pygame.display.set_mode((450,450))
#加载第一张图片,并将其转换为与当前模式相匹配的模式
background = pygame.image.load("banboo.jpg").convert_alpha()
theremin = pygame.image.load("panda.jpg").convert_alpha()
#将第一张图片与surface合并,并通过参数设置图片合并的位置
screen.blit(background, (0,0))
screen.blit(theremin, (135, 150))
while True:
pygame.display.update()

结果显示如下:

分析:由上图可以看出,大熊猫并没有被完全显示,因为大熊猫“panda.jpg”这个图片的分辨率大于竹子“banboo.jpg”这个图片,因此才不能显示完整的熊猫图片,因此可以尝试调节大熊猫的像素来适应竹子的像素。

3、在Surface上绘图

如果要绘制一段文字,就需要加载字体,需要用到font模块来加载字体文件并渲染文本。可以先通过pygame.font.get_fonts()函数可以获取pi上的字体列表:

 import pygame

 pygame.init()
for fontname in pygame.font.get_fonts():
print fontname

输出结果如下图:

下面将使用代码加载freemono这个字体来渲染文本:

 import pygame

 pygame.init()
screen = pygame.display.set_mode((725, 92))
#设置字体类型为“freemono”,大小为72号
font = pygame.font.SysFont("freemono", 72, bold = 1)
textSurface = font.render("I love my pi!", 1,
pygame.Color(255, 255, 255))
screen.blit(textSurface, (10, 10))
while True:
pygame.display.update()

输出结果如下:

 4、处理事件与输入

在pygame中,用户触发的事件会被捕获并以Event的对象形式放入消息队列,而pygame.event模块提供从消息队列中获取未被处理的事件对象并能够对事件进行进一步的处理。接下来将会扩展pygame_1程序来通过捕捉鼠标事件来绘制不同的圆形,原理是越靠近窗口边缘,圆的半径越大。

程序如下图所示:

结果图很漂亮:

5、播放声音

tips:这里,树莓派屏幕右上方出现一个彩色方块的原因时供电不足,建议截usb插口的话,用供电的多接口usb,因为严重供电不足,否则的话播放音乐插耳机的时候各种故障,然后系统崩溃,树莓派发热发烫。

5.1在命令行中输入以下命令打开工具界面:

sudo raspi-config

5.2选择Advanced-option回车后,选择Audio再回车

5.3由于默认的声音输出口试HDMI输出,如果你的HDMI连接的显示屏是没有声音播放口的话建议转为模拟信号输出,也就是耳机输出,选择Forced audio即可

好的,现在你可以百度一个在线音乐,在耳机插孔插上耳机就可以听到音乐了。

6、播放视频

为了不让我的树莓派早夭,我决定去拿供电usb,果然那可恶的小方块不见了,但是不稳定,用电多的时候,还是会随着电源的红色信号灯一闪一闪,小方块也会一闪一闪,可能是供电的电源仍然不够,或者是因为我插上的东西太多了,或许无线鼠标和键盘会比较好。;

pygame.movie模块可以播放视频,前提是视频必须是MPEG1格式的,也就是类似于“.mpg”结尾的视频。当然可以通过安装ffmpeg将其他格式的视频转换为mpg格式。

代码如下:

 import pygame
from time import sleep pygame.init() screen = pygame.display.set_mode((320, 240))
movie = pygame.movie.Movie("foo.mpg")
movie.play()
while True:
if not(movie.get_play):
print("rewind")
movie.rewind() # 倒带
movie.play() #重新播放
if pygame.QUIT in [event.type for event in pygame.event.get()]:
break

温馨提示:在pygame.examples模块中有很多完整的实例程序,可以在/usr/share/pyshared/pygame/exalmpes目录中找到源代码。

玩转树莓派《二》——用python实现动画与多媒体的更多相关文章

  1. 菜鸟玩云计算之二十:saltstack入门初步

    菜鸟玩云计算之二十 SaltStack 入门初步 0. saltstack 是什么 参考下面的文章: http://docs.saltstack.com/en/latest/topics/tutori ...

  2. 二、Python数据类型(一)

    一.Python的基本输入与输出语句 (一)输出语句 print() 示例: print('你好,Python') print(4+5) a = 10 print(a) 输出的内容可以是字符串,变量, ...

  3. 二十三. Python基础(23)--经典类和新式类

    二十三. Python基础(23)--经典类和新式类 ●知识框架   ●接口类&抽象类的实现 # 接口类&抽象类的实现 #①抛出异常法 class Parent(object):    ...

  4. 二十一. Python基础(21)--Python基础(21)

    二十一. Python基础(21)--Python基础(21) 1 ● 类的命名空间 #对于类的静态属性:     #类.属性: 调用的就是类中的属性     #对象.属性: 先从自己的内存空间里找名 ...

  5. windows下mongodb基础玩法系列二CURD附加一

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

  6. windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)

    windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...

  7. 二十. Python基础(20)--面向对象的基础

    二十. Python基础(20)--面向对象的基础 1 ● 类/对象/实例化 类:具有相同属性.和方法的一类人/事/物 对象(实例): 具体的某一个人/事/物 实例化: 用类创建对象的过程→类名(参数 ...

  8. vue2.0学习笔记之路由(二)路由嵌套+动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. windows下一根数据线玩转树莓派zero(w)

    买了个树莓派zero w,想着用一根普通micro数据线达成 供电+ssh+通过usb共享网络+远程桌面 的目标 通过用静态ip免去了用benjour的连接不稳定方法,下面开始细说 需要的硬件: 树莓 ...

随机推荐

  1. Devexpress Winform初学笔记

    作为一个软件开发人员来说,得有自己的博客,可以用来ZB,哈哈!玩笑话..... 写博客并不仅仅是用来ZB的,他可以用来记录你在技术道路上探索遇到的坎,当然也有提高逼格的次然因素啦!小弟刚入博客园不久, ...

  2. [uwp]自定义图形裁切控件

    开始之前,先上一张美图.图中的花叫什么,我已经忘了,或者说从来就不知道,总之谓之曰“野花”.只记得花很美,很香,春夏时节,漫山遍野全是她.这大概是七八年前的记忆了,不过她依旧会很准时的在山上沐浴春光, ...

  3. 实验了一下LitSphere做车漆

    前阵子跟人聊天,聊起过去试验的车漆,不适合做到移动设备上.过去试验的车漆在此http://www.cnblogs.com/sitt/archive/2012/03/28/2420595.html 于是 ...

  4. 重装SQL前,一定要把SQL2005、SQL2008之类的彻底删除干净

    0.预备 如果你曾删除过VS2010或者VS2008之类的,同理也要照此方法删除 1.步骤,顺序无妨 卸载程序:控制面板---查找SQL..NET   删除干净 停掉SQL的所有服务:  计算机--管 ...

  5. java public class和class的区别

  6. 指针版P3690 【模板】Link Cut Tree (动态树)

    题面 传送门 题解 鉴于数组版实在是太慢我用指针版重新写了一遍 代码基本是借鉴了lxl某道关于\(LCT\)的题 //minamoto #include<bits/stdc++.h> #d ...

  7. Linux 重命名

    例子:将目录A重命名为B mv A B 例子:将/a目录移动到/b下,并重命名为c mv /a /b/c 其实在文本模式中要重命名文件或目录,只需要使用mv命令就可以了,比如说要将一个名为abc的文件 ...

  8. jQuery的隔行换色

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. php 逐行读取文本文件

    在读取文本时,我们要注意一个事情,那就是换行符,应为我们在写文档时会手动换行,这个换行符需不需要保存就要看自己的需求了. 这里封装了两个方法,一个保留换行,一个不保留.$path为文件路径+文件名 1 ...

  10. 功能一: 数据库访问DAO层方法定义

    功能1: 今天到现在为止 实战课程的访问量 yyyyMMdd courseID 使用数据库来进行存储我们的统计结果 Spark Streaming把统计结果写入到数据库里面 可视化前端根据: yyyy ...