游戏里面一般是肯定会出现文字显示的,即使是俄罗斯方块也应该显示分数。那么我们应该怎样来显示文字呢,今天一起学习一下pygame的font模块。

使用字体模块

pygame可以直接调用系统字体,也可以调用TTF字体。为了使用字体,首先应该创建一个Font对象,对于系统自带的字体,应该这样调用:

>>> font1 = pygame.font.SysFont('arial', 16)

第一个参数是字体名,第二个参数是字号。正常情况下系统里都会有arial字体,如果没有会使用默认字体,默认字体和各个系统有关。

可以使用pygame.font.get_fonts()来获得当前系统所有可用字体:

>>>pygame.font.get_fonts()

['stsong', 'rod', 'microsoftyahei', 'mingliupmingliumingliuhkscs', 'stxingkai', 'euclidmathtwo', 'impact', 'simplifiedarabicfixed', 'wingdings2', 'wingdings3', 'lucidabright', 'verdana', 'mistral', 'gigi', 'traditionalarabic', 'lucidacalligraphy', 'lucidasanstypewriteroblique', 'stzhongsong', 'tempussansitc', 'microsoftuighur', 'georgia', 'wingdings', 'goudystout', 'candara', 'pristina', 'microsoftjhengheimicrosoftjhengheiui', 'gulimgulimchedotumdotumche', 'lisu', 'levenim', 'lucidafaxregular', 'lucidasansregular', 'lucidafax', 'tahoma', 'blackadderitc', 'niagarasolid', 'euclid', 'bernardcondensed', 'lucidasanstypewriterregular', 'bauhaus93', 'corbel', 'segoeuisymbol', 'franklingothicdemi', 'poorrichard', 'centaur', 'stxinwei', 'arialblack', 'nirmalaui', 'msoutlook', 'microsoftjhenghei', 'tigerexpert', 'malgungothic', 'felixtitling', 'freesiaupc', 'colonna', 'franklingothicheavy', 'harrington', 'jokerman', 'extra', 'lucidasanstypewriter', 'rockwellcondensed', 'stfangsong', 'microsoftnewtailue', 'aharoni', 'twcen', 'britannic', 'mvboli', 'goudyoldstyle', 'microsoftsansserif', 'gisha', 'fzshuti', 'simsunnsimsun', 'estrangeloedessa', 'symboltigerexpert', 'juiceitc', 'onyx', 'tiger', 'webdings', 'franklingothicmediumcond', 'edwardianscriptitc', 'vani', 'couriernew', 'freestylescript', 'palacescript', 'bodonicondensed', 'msminchomspmincho', 'andalus', 'footlight', 'vivaldi', 'century', 'arialrounded', 'papyrus', 'ocraextended', 'simsunextb', 'arialms', 'microsoftphagspa', 'hightowertext', 'stxihei', 'bodoni', 'haettenschweiler', 'berlinsansfbdemi', 'twcencondensedextra', 'elephant', 'angsananew', 'widelatin', 'meiryomeiryoboldmeiryouiboldmeiryouibolditalic', 'segoeuisemilight', 'shruti', 'arabictypesetting', 'timesnewroman', 'lucidahandwriting', 'maturascriptcapitals', 'engravers', 'segoeuisemibold', 'vladimirscript', 'kaiti', 'mingliuextbpmingliuextbmingliuhkscsextb', 'miriamfixed', 'kokila', 'chiller', 'fangsong', 'niagaraengraved', 'gillsansextcondensed', 'raavi', 'rockwellextra', 'gillsansultra', 'browalliaupc', 'euclidmathone', 'broadway', 'dilleniaupc', 'stkaiti', 'parchment', 'franklingothicdemicond', 'gadugi', 'calibri', 'arial', 'curlz', 'batangbatangchegungsuhgungsuhche', 'shonarbangla', 'extratiger', 'maiandragd', 'simhei', 'narkisim', 'segoeui', 'aparajitaitali', 'calisto', 'leelawadee', 'lucidasansroman', 'cooperblack', 'sakkalmajalla', 'berlinsansfb', 'consolas', 'frenchscript', 'microsoftjhengheimicrosoftjhengheiuibold', 'sylfaen', 'algerian', 'microsoftyaheimicrosoftyaheiui', 'microsoftyaheimicrosoftyaheiuibold', 'oldenglishtext', 'bradleyhanditc', 'aparajita', 'kodchiangupc', 'gillsans', 'palatinolinotype', 'gloucesterextracondensed', 'gabriola', 'lucidaconsole', 'plantagenetcherokee', 'meiryomeiryomeiryouimeiryouiitalic', 'cordiaupc', 'erasdemiitc', 'segoeprint', 'nyala', 'harlowsolid', 'forte', 'franklingothicmedium', 'laoui', 'microsofttaile', 'bookantiqua', 'symbol', 'lucidasans', 'garamond', 'vrinda', 'agencyfb', 'constantia', 'jasmineupc', 'khmerui', 'kalinga', 'kartika', 'euphemia', 'frankruehl', 'vinerhanditc', 'snapitc', 'euclidsymbol', 'david', 'baskervilleoldface', 'segoescript', 'cambria', 'daunpenh', 'bodonipostercompressed', 'monotypecorsiva', 'perpetuatitling', 'trebuchetms', 'msreferencesansserif', 'imprintshadow', 'centuryschoolbook', 'browallianew', 'sthupo', 'stencil', 'script', 'bookmanoldstyle', 'ebrima', 'msgothicmspgothicmsuigothic', 'copperplategothic', 'modernno20', 'utsaahitali', 'microsoftyibaiti', 'dfkaisb', 'comicsansms', 'magneto', 'rockwell', 'ravie', 'youyuan', 'bodoniblack', 'latha', 'irisupc', 'dokchampa', 'rage', 'msreferencespecialty', 'euclidfraktur', 'playbill', 'cambriacambriamath', 'kunstlerscript', 'twcencondensed', 'showcardgothic', 'bell', 'mangal', 'cordianew', 'californianfb', 'stliti', 'kristenitc', 'erasmediumitc', 'fencesplain', 'euclidextra', 'moolboran', 'informalroman', 'mongolianbaiti', 'symboltiger', 'centurygothic', 'franklingothicbook', 'castellar', 'iskoolapota', 'microsofthimalaya', 'erasitc', 'kokilaitali', 'stcaiyun', 'fzyaoti', 'gillsanscondensed', 'simplifiedarabic', 'vijaya', 'gillsansultracondensed', 'miriam', 'perpetua', 'bookshelfsymbol7', 'gautami', 'utsaah', 'lilyupc', 'tunga', 'angsanaupc', 'brushscript', 'eucrosiaupc']

还有一种调用方法是使用自己的ttf字体:

my_font = pygame.font.Font("my_font.ttf", 16)

这个方法的优势是你可以把字体文件和游戏一起打包分发,避免玩家电脑上没有这个字体无法显示的问题。

一旦你有了Font对象,你就可以用render方法来写字了,然后通过blit方法blit到屏幕上;

>>> text = font1.render("Input your text here",True,(0,0,0),(255,255,255))

render方法的第一个参数是写入的文字内容;第二个是布尔值,说明是否开启抗锯齿;第三个是字体本身的颜色;第四个是背景的颜色。如果不想有背景色,也就是让背景透明的话,可以不加第四个参数。

另外,如果是Python2,想显示中文的话,要使用能用中文的字体,然后用u前缀字符串,也就是用Unicode编码。最后还得在文件头加上,# -*- coding: utf-8 -*-这样的注释文字。

字体模块的具体使用,我举下面这个例子,连上讲,说明显示所有事件的办法:

#-*- coding: utf-8 -*-

importpygamefrom sys importexit

pygame.init()#初始化pygame

SCREEN_SIZE = (640, 480) #存储屏幕尺寸

screen = pygame.display.set_mode(SCREEN_SIZE, 0, 32)#创建窗口

my_font= pygame.font.SysFont('arial',16)#创建字体对象

font_height =my_font.get_linesize()#得到字体的高度值

text =[]while True:#主循环

event = pygame.event.wait()#这里用了wait()方法

text.append(str(event))#获得事件的名称

text = text[-SCREEN_SIZE[1]/font_height:]#这个切片操作保证了event_text里面只保留一个屏幕的文字

if event.type ==pygame.QUIT:

pygame.quit()

exit()

screen.fill((255,255,255))

y= SCREEN_SIZE[1]-font_height#找一个合适的起笔位置,最下面开始但是要留一行的空

for line in reversed(text):#倒序写满整个屏幕的文字

screen.blit(my_font.render(line, True, (0,0,0)), (0, y))#显示字体

y -=font_height#把笔提一行

pygame.display.update()

这个程序的具体解释应该看注释就可以理解。所以就不详细说明了。其中pygame.event.wait()是一直等待到有事件的发生才会执行,一般不常用这个方法。

写程序的时候建议大家读懂后给每一行加上自己的注释,然后删去我的源码,重新打一遍,那样会比较容易掌握pygame的使用。当然,这么简单的东西对于大多熟练的程序员都不需要那么细致的学习,大致看过去就可以了。

Python的错误处理

程序总是会出错的,pygame的运行也常常是这样,那个时候没办法只能强制中止程序,而强制中止程序能够成功还是系统的功劳。那么我们应该怎样避免程序错误时完全无法反应呢?

Python提供了良好的错误处理机制,应该使用起来:

try:

screen=pygame.display.set_mode(SCREEN_SIZE)exceptpygame.error, e:print "Can't create the display :-("

printe

pygame.quit()

exit()

这种方法非常有用,特别是开发实际的程序中。当然这仅仅是Python自带的处理方式,但是这很有用。

今天就讲这么多,之后我通过一步步制作一个简单的小游戏来说明pygame的具体使用。讲的比较基础,价值有限,对于初学者稍有一些意思。

我准备模仿微信的飞机大战制作过程说明,很简单的2D小游戏。只是献丑。

今天女朋友给我买的键盘刚到货,青轴的脆响的确很舒服。让我自己偷着乐一会儿。

python pygame字体设置_2015/11/3用Python写游戏,pygame入门(3):字体模块、事件显示和错误处理...相关推荐

  1. 用Python和Pygame写游戏-从入门到精通(1)

    From: http://eyehere.net/2011/python-pygame-novice-professional-1/ 博客刚开,打算做一个Pygame的系列,翻译自Will McGug ...

  2. 用Python和Pygame写游戏-从入门到精通

    博客刚开,打算做一个Pygame的系列,翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novi ...

  3. python教程是用什么博客写的-用Python和Pygame写游戏-从入门到精通(目录)

    目光博客一开始,就有一个将pygame好好介绍一遍的宏伟计划,历时四个月,在各位朋友的关怀鞭策下,如今(2011/8/26)理论学习的部分似乎已经都完成了,在次列一个目录,方便查询.介绍还不是很全,下 ...

  4. python用户界面游戏_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块2)...

    我们接着来做这个整死人不偿命的俄罗斯方块. 代码组织和名词约定 上一次我们稍微整理了一下游戏运行的框架,这里需要整理一下python代码的框架,一个典型的pygame脚本结构如下: 其中,lib为py ...

  5. python游戏开发框架_用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块1)...

    游戏是为了什么而存在的?Bingo,是为了娱乐~ 在这个最高主题之前,技术啥的什么都无所谓! 前一段时间,有位姓刘的网友用Pygame写了个俄罗斯方块,在用py2exe打包的时候遇到一些问题,和我交流 ...

  6. 用python和pygame写游戏_用Python和Pygame写游戏-从入门到精通(6)

    掌握了小小的像素,我们可以使用更加复杂一点的东西了,对,就是图像,无数的像素的集合~还记得上次我们为了生成的一张图片,花了无数时间,还好一般游戏不会在游戏的过程中动态生成图像,都是将画好的作为资源封装 ...

  7. pygame做的著名游戏_用Python和Pygame写游戏-从入门到放弃(1)

    Pygame的介绍 Pygame是一组专门为编写游戏设计的Python模块,增加了SDL库功能.可以使你在Python语言中轻松的创建全功能的游戏和多媒体程序. Pygame是免费的,在GPL许可下发 ...

  8. python运行游戏是否需要pygame_用Python和Pygame写游戏-从入门到放弃(1)

    Pygame的介绍 Pygame是一组专门为编写游戏设计的Python模块,增加了SDL库功能.可以使你在Python语言中轻松的创建全功能的游戏和多媒体程序. Pygame是免费的,在GPL许可下发 ...

  9. python自动化办公设置_python自动化办公之 python操作Excel

    今天就为大家介绍一下,使用 Python 如何操作 Excel . 常用工具 数据处理是 Python 的一大应用场景,而 Excel 又是当前最流行的数据处理软件.因此用 Python 进行数据处理 ...

  10. pygame和python的区别_用Python和Pygame写游戏-从入门到精通(22)

    # -*- coding: utf-8 -*- # 注意文件编码也必须是utf-8 SCREEN_SIZE = (800, 600) # 存放音乐文件的位置 MUSIC_PATH = "./ ...

最新文章

  1. python中什么是字符举例说明_第20p,什么是字符串?Python中的str
  2. 常用C/C++开源库
  3. getaddrinfo函数
  4. Flex学习的利器《Hello Flex4》
  5. bzoj 1232: [Usaco2008Nov]安慰奶牛cheer【最小生成树】
  6. css3实现头像旋转360度
  7. 小马源码_Java互联网架构-重新认识Java8-HashMap-不一样的源码解读
  8. The _imagingft C module is not installed
  9. 四川专利代理机构列表
  10. 都昌时间轴控件功能说明
  11. C# CAD二次开发之字体替换 文字样式 处理DBText
  12. 国外经济学期刊分类汇总(经济学、统计学、精算学和金融计量方面)
  13. 把你的 Mac 从 Catalina 降级回 Mojave 系统的避坑指南
  14. python 知识点视频,Python超详细入门教程-Python基础视频教程-千锋教育视频资源库...
  15. 什么是计算机网络的组成和功能是什么,计算机网络的组成要素及功能是什么
  16. Jenkins学习(执行命令路径,脚本上传静态html代码)(一)
  17. 关于导入.a文件后报错Undefined symbols for architecture arm64:
  18. 2022年房地产开发行业研究报告
  19. hive 中文字符过滤_hive中文字符乱码 解决方法【转】
  20. 个人账号被Facebook封号怎么办

热门文章

  1. sublime text 3211 安装中文包
  2. ios下使用speex进行音频压缩
  3. Python大数据分析(三):大数据统计分析技术
  4. 大话Elasticsearch常用操作和核心原理
  5. LOJ-10102(求A到B之间的割点)
  6. Docker安装Redis 6.2.6的3主3从集群和集群的扩缩容操作
  7. joomla人人登录
  8. 【网络安全】学习笔记 --02 安全通信协议
  9. PS基础全讲和使用技巧(二)
  10. 502 (Bad Gateway) 原因及解决方法