再简单的游戏界面中均涉及文字处理,本节主要解读一下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. android ImageView 设定宽度铺满,高度自定义

    问题:imageView 宽度铺满,高度自定义,会出现上下留白的现象(一般比例的还好) 解决: <xxx.xxx.xxx.xxx.FullWidthImageView android:id=&q ...

  2. ERR_INVALID_REDIRECT

    原因为: response.sendRedirect(url) url地址写错了

  3. sql server 将数据库表里面的数据,转为insert语句,方便小批量转移数据

    create proc [dbo].[proc_insert] (@tablename varchar(256)) as begin set nocount on declare @sqlstr va ...

  4. Argo CD初体验

    什么是 Argo CD? Argo CD 是一个声明式的 GitOps 持续交付工具,用于 Kubernetes 集群.它通过持续监控 Git 仓库中的 Kubernetes 资源配置文件,将这些配置 ...

  5. Qml 实现仿前端的 Notification (悬浮出现页面上的通知消息)

    [写在前面] 经常接触前端的朋友应该经常见到下面的控件: 在前端中一般称它为 Notification 或 Message,但本质是一种东西,即:悬浮弹出式的消息提醒框. 这种组件一般具有以下特点: ...

  6. JavaScript – Object.groupBy & Map.groupBy

    前言 group by 是一个很常见的功能,但 JS 却没有 build-in 的方法,一直到 es2024 才有 Object.groupBy (前生是 Array.prototype.group) ...

  7. CSS & JS Effect – Statistics Counter

    效果 当 scroll 到那些号码的时候, 号码从 0 开始跳动, 一直到最终的值. 实现思路 1. 一开始把号码 set to 0 2. 使用 IntersectionObserver 监听号码出现 ...

  8. Spring —— 事务角色&&事务属性

    事务角色 事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法       事务属性:    事务传播行 ...

  9. 【解决方案】Java 互联网项目中常见的 Redis 缓存应用场景

    目录 前言 一.常见 key-value 二.时效性强 三.计数器相关 四.高实时性 五.排行榜系列 六.文章小结 前言 在笔者 3 年的 Java 一线开发经历中,尤其是一些移动端.用户量大的互联网 ...

  10. module_softdep

    所谓的MODULE_SOFTDEP,就是两个两个模块之间本有依赖,但是一定要要加载顺序的要求. 用法很简单. #define MODULE_SOFTDEP(_softdep) MODULE_INFO( ...