再简单的游戏界面中均涉及文字处理,本节主要解读一下pygame模块中对文字及字体的处理方式。 同样,以实例进行讲解,先看看代码:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import sys
  4. import os
  5. import pygame
  6. from pygame.locals import *
  7. def load_image(pic_name):
  8. '''''
  9. Function:图片加载函数
  10. Input:pic_name 图片名称
  11. Output: NONE
  12. author: dyx1024
  13. blog:http://blog.csdn.net/dyx1024
  14. date:2012-04-15
  15. '''
  16. #获取当前脚本文件所在目录的绝对路径
  17. current_dir = os.path.split(os.path.abspath(__file__))[0]
  18. #指定图片目录
  19. path = os.path.join(current_dir, 'image', pic_name)
  20. #加载图片
  21. return pygame.image.load(path).convert()
  22. def init_windows():
  23. '''''
  24. Function:窗口初始化
  25. Input:NONE
  26. Output: NONE
  27. author: dyx1024
  28. blog:http://blog.csdn.net/dyx1024
  29. date:2012-04-21
  30. '''
  31. pygame.init()
  32. display_surface = pygame.display.set_mode((600, 500))
  33. pygame.display.set_caption('游戏中的文字处理(http://blog.csdn.net/dyx1024)')
  34. return display_surface
  35. def exit_windows():
  36. '''''
  37. Function:退出处理
  38. Input:NONE
  39. Output: NONE
  40. author: dyx1024
  41. blog:http://blog.csdn.net/dyx1024
  42. date:2012-04-21
  43. '''
  44. pygame.quit()
  45. sys.exit()
  46. def main():
  47. '''''
  48. Function:字体处理
  49. Input:NONE
  50. Output: NONE
  51. author: dyx1024
  52. blog:http://blog.csdn.net/dyx1024
  53. date:2012-04-21
  54. '''
  55. screen_surface = init_windows()
  56. back_image = load_image('mengqiqi.jpg')
  57. color_red = (255, 0, 0)
  58. color_green = (0, 255, 0)
  59. color_blue  = (0, 0, 255)
  60. #第一组文字
  61. #创建一个Font对象,其中LOWRBI__.TTF为下载的字体库
  62. fontObj = pygame.font.Font('LOWRBI__.TTF', 32)
  63. #创建一个存放文字surface对象,
  64. textSurfaceObj = fontObj.render(u'HELLO MONCHHICHI', False, color_green)
  65. #文字图像位置
  66. textRectObj = textSurfaceObj.get_rect()
  67. #第二组文字
  68. fontObj2 = pygame.font.Font('simkai.TTF', 20)
  69. #添加下画线
  70. fontObj2.set_underline(True)
  71. textSurfaceObj2 = fontObj2.render(u'很萌,有木有!', False, color_red)
  72. textRectObj2 = textSurfaceObj2.get_rect()
  73. textRectObj2.center = (80, 480)
  74. #第三组文字
  75. #使用系统字体
  76. fontObj3 = pygame.font.SysFont('宋体', 20)
  77. #加粗
  78. fontObj3.set_bold(True)
  79. #斜体
  80. fontObj3.set_italic(True)
  81. #文字具有蓝色背景
  82. textSurfaceObj3 = fontObj3.render(u'又到凌晨了,睡', True, color_red, color_blue)
  83. textRectObj3 = textSurfaceObj3.get_rect()
  84. textRectObj3.center = (500, 10)
  85. while True:
  86. #绘图
  87. screen_surface.blit(back_image, (0, 0))
  88. screen_surface.blit(textSurfaceObj, textRectObj)
  89. screen_surface.blit(textSurfaceObj2, textRectObj2)
  90. screen_surface.blit(textSurfaceObj3, textRectObj3)
  91. for event in pygame.event.get():
  92. if event.type == QUIT:
  93. exit_windows()
  94. pygame.display.update()
  95. if __name__ == '__main__':
  96. main()

运行:

做一些解释:

1、fontObj = pygame.font.Font('LOWRBI__.TTF', 32)

此句创建了一个Font类的对象,原型为:pygame.font.Font(filename, size): return Font

其中filename为字体文件,windows下字体文件所在目录为:C:\WINDOWS\Fonts,以TTF后续结尾。

例如,我的机器上字体如下:

  1. -rwxrwx---+ 1 Administrators SYSTEM   367112 八月 17 2004 arial.ttf
  2. -rwxrwx---+ 1 Administrators SYSTEM   352224 八月 17 2004 arialbd.ttf
  3. -rwxrwx---+ 1 Administrators SYSTEM   226748 八月 17 2004 arialbi.ttf
  4. -rwxrwx---+ 1 Administrators SYSTEM   207808 八月 17 2004 ariali.ttf
  5. -rwxrwx---+ 1 Administrators SYSTEM   117028 八月 17 2004 ariblk.ttf
  6. -rwxrwx---+ 1 Administrators SYSTEM   127596 八月 17 2004 comic.ttf
  7. -rwxrwx---+ 1 Administrators SYSTEM   111476 八月 17 2004 comicbd.ttf
  8. -rwxrwx---+ 1 Administrators SYSTEM   303296 八月 17 2004 cour.ttf
  9. -rwxrwx---+ 1 Administrators SYSTEM   312920 八月 17 2004 courbd.ttf
  10. -rwxrwx---+ 1 Administrators SYSTEM   236148 八月 17 2004 courbi.ttf
  11. -rwxrwx---+ 1 Administrators SYSTEM   245032 八月 17 2004 couri.ttf
  12. -rwxrwx---+ 1 Administrators SYSTEM    79744 八月 17 2004 estre.ttf
  13. -rwxrwx---+ 1 Administrators SYSTEM   135984 八月 17 2004 framd.ttf
  14. -rwxrwx---+ 1 Administrators SYSTEM   152844 八月 17 2004 framdit.ttf
  15. -rwxrwx---+ 1 Administrators SYSTEM   214936 八月 17 2004 gautami.ttf
  16. -rwxrwx---+ 1 Administrators SYSTEM   155068 八月 17 2004 georgia.ttf
  17. -rwxrwx---+ 1 Administrators SYSTEM   141032 八月 17 2004 georgiab.ttf
  18. -rwxrwx---+ 1 Administrators SYSTEM   157388 八月 17 2004 georgiai.ttf
  19. -rwxrwx---+ 1 Administrators SYSTEM   159736 八月 17 2004 georgiaz.ttf
  20. -rwxrwx---+ 1 Administrators SYSTEM   136076 八月 17 2004 impact.ttf
  21. -rwxrwx---+ 1 Administrators SYSTEM   121452 八月 17 2004 kartika.ttf
  22. -rwxrwx---+ 1 Administrators SYSTEM   323980 八月 17 2004 l_10646.ttf
  23. -rwxrwx---+ 1 Administrators SYSTEM    73292 八月 17 2004 latha.ttf
  24. -rwx------+ 1 socrates       None     493540 十二  2 2008 lingoes.ttf
  25. -rwxrwx---+ 1 Administrators SYSTEM    58740 八月 17 2004 lsans.ttf
  26. -rwxrwx---+ 1 Administrators SYSTEM    54320 八月 17 2004 lsansd.ttf
  27. -rwxrwx---+ 1 Administrators SYSTEM    60664 八月 17 2004 lsansdi.ttf
  28. -rwxrwx---+ 1 Administrators SYSTEM    59636 八月 17 2004 lsansi.ttf
  29. -rwxrwx---+ 1 Administrators SYSTEM   115068 八月 17 2004 lucon.ttf
  30. -rwxrwx---+ 1 Administrators SYSTEM   143864 八月 17 2004 mangal.ttf
  31. -rwxrwx---+ 1 Administrators SYSTEM    24124 八月 17 2004 marlett.ttf
  32. -rwxrwx---+ 1 Administrators SYSTEM   460728 八月 17 2004 micross.ttf
  33. -rwxrwx---+ 1 Administrators SYSTEM    40500 八月 17 2004 mvboli.ttf
  34. -rwxrwx---+ 1 Administrators SYSTEM   123424 十二  9 2002 nina.ttf
  35. -rwxrwx---+ 1 Administrators SYSTEM   131424 十二  9 2002 ninab.ttf
  36. -rwxrwx---+ 1 Administrators SYSTEM   489884 八月 17 2004 pala.ttf
  37. -rwxrwx---+ 1 Administrators SYSTEM   434004 八月 17 2004 palab.ttf
  38. -rwxrwx---+ 1 Administrators SYSTEM   344288 八月 17 2004 palabi.ttf
  39. -rwxrwx---+ 1 Administrators SYSTEM   430800 八月 17 2004 palai.ttf
  40. -rwxrwx---+ 1 Administrators SYSTEM    57348 八月 17 2004 raavi.ttf
  41. -rwxrwx---+ 1 Administrators SYSTEM   234280 八月 17 2004 shruti.ttf
  42. -rwxrwx---+ 1 Administrators SYSTEM  3996872 八月 17 2004 simfang.ttf
  43. -rwxrwx---+ 1 Administrators SYSTEM 10044356 八月 17 2004 simhei.ttf
  44. -rwxrwx---+ 1 Administrators SYSTEM  4135804 八月 17 2004 simkai.ttf
  45. -rwxrwx---+ 1 Administrators SYSTEM   221676 八月 17 2004 sylfaen.ttf
  46. -rwxrwx---+ 1 Administrators SYSTEM    69464 八月 17 2004 symbol.ttf
  47. -rwxrwx---+ 1 Administrators SYSTEM   383140 八月 17 2004 tahoma.ttf
  48. -rwxrwx---+ 1 Administrators SYSTEM   355436 八月 17 2004 tahomabd.ttf
  49. -rwxrwx---+ 1 Administrators SYSTEM   409280 八月 17 2004 times.ttf
  50. -rwxrwx---+ 1 Administrators SYSTEM   398372 八月 17 2004 timesbd.ttf
  51. -rwxrwx---+ 1 Administrators SYSTEM   239692 八月 17 2004 timesbi.ttf
  52. -rwxrwx---+ 1 Administrators SYSTEM   248368 八月 17 2004 timesi.ttf
  53. -rwxrwx---+ 1 Administrators SYSTEM   134108 八月 17 2004 trebuc.ttf
  54. -rwxrwx---+ 1 Administrators SYSTEM   123096 八月 17 2004 trebucbd.ttf
  55. -rwxrwx---+ 1 Administrators SYSTEM   131188 八月 17 2004 trebucbi.ttf
  56. -rwxrwx---+ 1 Administrators SYSTEM   139288 八月 17 2004 trebucit.ttf
  57. -rwxrwx---+ 1 Administrators SYSTEM   148636 八月 17 2004 tunga.ttf
  58. -rwxrwx---+ 1 Administrators SYSTEM   171792 八月 17 2004 verdana.ttf
  59. -rwxrwx---+ 1 Administrators SYSTEM   137616 八月 17 2004 verdanab.ttf
  60. -rwxrwx---+ 1 Administrators SYSTEM   155076 八月 17 2004 verdanai.ttf
  61. -rwxrwx---+ 1 Administrators SYSTEM   154800 八月 17 2004 verdanaz.ttf
  62. -rwxrwx---+ 1 Administrators SYSTEM   252820 八月 17 2004 vrinda.ttf
  63. -rwxrwx---+ 1 Administrators SYSTEM   118752 八月 17 2004 webdings.ttf
  64. -rwxrwx---+ 1 Administrators SYSTEM    81000 八月 17 2004 wingding.ttf

注意,最好将你要用到的文件复制一份到脚本所在目录下,这样在游戏发布时,可以一起打包,解决了目标机器上可能没有所使用字体的问题,另,如果需要特殊字体,可从网上下载,使用方法一样。

第二个参数size为字体大小。

2、textSurfaceObj = fontObj.render(u'HELLO MONCHHICHI', False, color_green)

此句为Font对象fontObj加载内容,并可设置颜色,格式等。

原型如下:Font.render(text, antialias, color, background=None): return Surface

参数解释:

text :要显示的文字内容,仅支持单行,即不能使用\n进行换行,如要打印多行,要建立多个font对象。

antialias:字体的边缘是否平滑,true表示平滑,false表示带有毛边。

color:文字颜色,取值RGB

background:文字背景色,可选。

3、textRectObj = textSurfaceObj.get_rect()

为testSurface创建一个Rect对象,大小由所有显示的文本高度及宽度决定。

4、设置字体加粗、下画线、斜体等属性,使用以下方法。

Font.set_bold(bool): return None 

      Font.set_underline(bool): return None

      Font.set_italic (bool): return None

Python:pygame游戏编程之旅五(游戏界面文字处理详解)的更多相关文章

  1. 【pygame游戏编程】第五篇-----动画显示

    import pygame import sys import os pygame.init() #窗口居中 os.environ[' screen_width = 600 screen_high = ...

  2. python+pygame制作一个可自定义的动态时钟和详解

    1.效果图 2.完整代码 #第1步:导出模块 import sys, random, math, pygame from pygame.locals import * from datetime im ...

  3. 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

    第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...

  4. Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...

  5. kafka原理和实践(五)spring-kafka配置详解

    系列目录 kafka原理和实践(一)原理:10分钟入门 kafka原理和实践(二)spring-kafka简单实践 kafka原理和实践(三)spring-kafka生产者源码 kafka原理和实践( ...

  6. 【python游戏编程之旅】第七篇---pygame中的冲突检测技术

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中的Sprite模块和如何加载动画:http://www.cnblogs ...

  7. 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/ ...

  8. 【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

  9. 【python游戏编程之旅】第五篇---嗷大喵爱吃鱼小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 我们一同在前几期的博客中已经学到了很多pygame的基本知识了,现在该做个小游戏实战一下了. 前几期博客链接 ...

  10. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

随机推荐

  1. MYSQL数据库设计1

    简单记录一下如何设计MySQL数据库 1.画出概念模型,概念模型是一个业务关系对照图,不需要定义字段类型什么的,仅仅是用于关系对照,指出对照关系 2.根据概念模型设计逻辑模型,逻辑模型需要包含字段的设 ...

  2. sicp每日一题[2.13-2.16]

    Exercise 2.13 Show that under the assumption of small percentage tolerances there is a simple formul ...

  3. 音视频入门-5-音频编码原理、编码器、ADTS格式

    1.  概念 音频压缩技术指的是对原始数字音频信号流(PCM编码)运用的数字信号处理技术. 2. 背景 和 压缩的必要性 研究发现,直接采用PCM码流进行存储和传输存在非常大的冗余度. 以CD为例,其 ...

  4. 记录一次BOOST库相关的使用包含互斥量、条件变量的类,引发的编译报错

    1. 工作中的代码: 2. 使用指针作为形参,不会造成编译报错,我是可以理解的. 那么请讨论下为什么使用值传递和引用作为形参,会造成编译报错? 3. 答案揭晓 boost 的mutex源码: 最终原因 ...

  5. 系统编程-进程-先后fork或open一个文件的区别

    关联博文: 当文件操作遇上fork Linux内核的文件结构体 struct file { ......... struct path f_path; //文件的路径 #define f_dentry ...

  6. Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解

    本篇借鉴了这篇文章,如果有兴趣,大家可以看看:https://blog.csdn.net/geter_CS/article/details/84857220 1.交叉熵:交叉熵主要是用来判定实际的输出 ...

  7. 3. 用过Konva吗,用过他的api吗

    基础:使用konva,首先需要创建舞台也就是stage,然后创建一个Layer图层,将图层放到舞台上,将图形等内容放到图层上 ; 第一步:创建一个Stage舞台  , 就是创建一个 stage 实例 ...

  8. KubeSphere 社区双周报 | 功能亮点抢“鲜”看 | 2022-09-30

    KubeSphere 从诞生的第一天起便秉持着开源.开放的理念,并且以社区的方式成长,如今 KubeSphere 已经成为全球最受欢迎的开源容器平台之一.这些都离不开社区小伙伴的共同努力,你们为 Ku ...

  9. 使用 Cursor 和 Devbox 快速开发基于 Rust 的 WASM 智能合约

    本教程以一个智能合约(使用 NEAR 的一个官方 Fungible Tokens 来实现)的例子来介绍一下 Devbox 的强大功能,轻松构建环境,轻松发布. NEAR 是一个去中心化的应用平台,使用 ...

  10. css超出部分...显示

    首先需要设置宽 white-space: nowrap;// 文字不换行 overflow: hidden;// 超出隐藏 text-overflow: ellipsis;   实现移入后正常显示的可 ...