pygame render怎么显示中文_PyGame开发游戏(2D)02.基础图元

这节将介绍PyGame的基础架构。并学习如何在PyGame里绘制各种几何图形和显示加载图片。

01.应用框架

上一节的示例程序里,我们用到一个PyGame的应用程序框架。这是一个基础框架,利用它我们可以很轻松的添加各类图型绘制,键盘鼠标输入处理和各类逻辑管理。一句话,它是一切游戏设计的基础框架。我们必须把它读懂,再往下学习。

02.图元绘制

PyGame可以绘制各种几何图型、文字和图片。下面我们分别介绍它们是如何使用的。

几何图元

#绘制线pygame.draw.line(画布,颜色,起始点,终止点,线粗细)#绘制矩阵pygame.draw.rect(画布,颜色,(矩阵左上角坐标,矩阵长宽),线粗细)#绘制圆形pygame.draw.circle(画布,颜色,中心点坐标,半径,线粗细)#绘制椭圆pygame.draw.ellipse(画布,颜色,(矩阵坐标),线粗细)#绘制多边形pygame.draw.polygon(画布,颜色,[顶点列表],线粗细)#绘制连续线段pygame.draw.lines(画布,颜色,是否封闭,[顶点列表],线粗细)

文字显示

在PyGame显示文字比划图形复杂点。他分为四个步骤:

1、创建字体对像。创建字体对象有两种方法,一种是直接指定使用系统自带字体(字体文件名),另一种是加载外部字体文件。这两种方法差不多。做成软件的话,建议第二种方法。

#方法1:指定系统自带黑体字库#字体大小为32个像素font = pygame.font.SysFont("SimHei",32) #方法2:指定外部黑体字库#字体大小为32个像素#必须指定字体文件SimHei.ttf字体文件所在的路径。font = pygame.font.Font("SimHei.ttf",32)

2、调置字体格式。

#是否要文字加粗font.set_bold(True)     #是否要文字斜体font.set_italic(True)     #是否要下划线font.set_underline(True)

3、设置文字显示位置

#获取文字对象尺寸大小text_pos = text_obj.get_rect()     #设置文本显示屏幕坐标,文本的中心点。text_pos.center = (300,100)

4、绘制文字

#在设定区域绘制文字canvas2d.blit(text_obj,text_pos);

图片显示

pygame支持两种类型图片显示。一种是不透明的位图(JPG和BMP),一种有透明的位图(PNG和GIF)。这两种图片使用方法是一样的。

#加载图片文件img01 = pygame.image.load("boy.jpg") #获得图片长和宽像素值,取其一半img01_w = img01.get_width()/2img01_h = img01.get_height()/2 #缩放图片img01 = pygame.transform.smoothscale(img01,(int(img01_w),int(img01_h)))#屏幕(10,10)位置显示图片canvas2d.blit(img01,(10,10))

03.综合示例

下面,我们写一个完整的程序,演示如何用PyGame绘制几何图型、文字和图片。

#包含pygame模块import pygame#包含pygame.locals模块,包含了 Pygame 定义的各种常量import pygame.locals#包含pygame.locals模块import pygame.locals  #包含sys系统操作模块import sys  #初始化pygamepygame.init()  #设置应用程序窗口大小,返回画布canvas2d = pygame.display.set_mode((800,600))  #设置应用程序窗口标签名称pygame.display.set_caption('02.绘制图元')#========================================#设置使用黑体字font = pygame.font.SysFont("SimHei",30)     #是否要文字加粗font.set_bold(True)     #是否要文字斜体font.set_italic(True)     #是否要下划线font.set_underline(True)#========================================#加载不透明图片文件img01 = pygame.image.load("zs.jpg") #获得图片长和宽像素值,取其四分之一img01_w = img01.get_width()/4img01_h = img01.get_height()/4 #缩放图片img01 = pygame.transform.smoothscale(img01,(int(img01_w),int(img01_h)))#=========================================  #开启游戏循环while True:          #轮询窗口事件    for event in pygame.event.get():              #如果获得关闭程序事件        if event.type== pygame.locals.QUIT:            pygame.quit()   #退出pygame            sys.exit()  #销毁程序         #绘制几何图型        #绘制线        pygame.draw.line(canvas2d,(255,0,0),(10,100),(100,100),4)         #绘制矩阵        pygame.draw.rect(canvas2d,(0,255,0),(120,50,200,100),2)         #绘制圆形        pygame.draw.circle(canvas2d,(0,0,255),(400,100),50,2)         #绘制椭圆        pygame.draw.ellipse(canvas2d,(255,255,0),(500,75,200,50),1)         #绘制多边形        plist1 = [(30,200),(30,300),(100,300)]        pygame.draw.polygon(canvas2d,(0,255,255),plist1,2)         #绘制连续线段        plist2 = [(230,200),(230,300),(320,300)]        pygame.draw.lines(canvas2d,(255,0,255),False,plist2,2)                #绘制文字        #把文字渲染到文本对象                #设置文字前景色和背景色        text_obj = font.render('PyGame显示字体!',True,(255,128,0),(128,128,128))                              #获取文字对象尺寸大小        text_pos = text_obj.get_rect()                 #设置文本显示屏幕坐标,文本的中心点。        text_pos.center = (200,400)                 #绘制文字        canvas2d.blit(text_obj,text_pos);                #屏幕(400,300)位置显示不透明图片        canvas2d.blit(img01,(400,300))                          #窗口显示内容更新    pygame.display.update()

2dd4a974a0066c3a86f108668a0feef6.png

程序运行效果


cee6bfea017281605babb43d0e6f3d1e.png

关注我们

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

word+增加水印+java_为Word2019文档添加水印的两种方法

水印的类型包括文字水印和图片水印两种。在Word文档中添加文字水印时,可以使用程序中预设的水印效果,而图片水印则需要自定义添加。一、使用程序预设的文字水印Word 2019中预设了机密、紧急、免责声明三种类型的文字水印,用户可根据文件的类型…

如何设置CentOS 7获取动态及静态IP地址

自动获取动态IP地址1.输入“ip addr”并按回车键确定,发现无法获取IP(CentOS 7默认没有ifconfig命令),记录下网卡名称(本例中为ens33)。2.输入“cd /etc/sysconfig/network-scripts/”按回车键确定,继续输入“ls”按回…

请求列出指定服务器上的可用功能失败_滥用 ESI 详解(上)

在进行安全性评估时,我们注意到了标记语言 Edge Side Includes (ESI)中的一个意外行为,这种语言用于许多流行的 HTTP 代理(反向代理、负载平衡器、缓存服务器、代理服务器)。我们发现成功的 ESI 攻击可以导致服务器端请求伪造(SSRF)、各种绕过 HTTPOnly …

openstack nova-network 的小bug的排错经历

环境是 nova-network vmwareflatdhcp错误表现为 开出来的虚拟机有一定几率获取不到dhcp地址,手工赋予ip则正常,用flat模式注入的ip正常,下面是排错过程1首先找网络防火墙已经把 dnsmasq对应的端口已经打开抓包结果:可以看到虚拟机…

anaconda base环境_anaconda中安装packages:pip还是conda install?

conda install我就不说了,这都不会别学了就。Using command:$ which -a pip, the terminal will return:This indicates two different pip path to install packages[1].在tf23环境中pip install在base环境中pip install在windows下powershell内,进入到…

【风马一族_xml】xmlp之dtd1

什么是XML约束?在xml技术里,可以编写一个文档来约束一个xml文档的写法,这称之为xml约束 2. 为什么要使用xml约束? 参看提示栏 3. xml约束的作用? 约束xml的写法对xml进行校验4. 常见的xml约束技术 xml dtdxml Schema…

java ssm框架 缓存_SSM框架之MyBatis3专题4:查询缓存

查询缓存的使用,主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化,不再每次均从数据库中查询获取结果数据,从而提高访问速度。MyBatis的查询缓存机制,根据缓存区的作用域(声明周期)可划分为两种:一级查…

matplotlib画图_漂亮,超详细的matplotlib画图基础

来自 | 逐梦erhttps://zhumenger.blog.csdn.net/article/details/106530281本文仅作技术交流,如有侵权,请联系后台删除。数据可视化非常重要,因为错误或不充分的数据表示方法可能会毁掉原本很出色的数据分析工作。matplotlib 库是专门用于开发…

android recycleview长按多选_UI设计中Android和IOS设计差异总结

由于设计师、产品经理使用的移动设备大部分是iPhone,所以在做设计时,容易忽略Android和iOS的差异,按照iOS的规范进行设计,两端只做一套。只做一套的会存在两个问题:1、安卓用户的使用习惯不太适应iOS的设计&#xff0c…

自定义动画属性java_创建酷炫动画效果的10个JavaScript库

原标题:创建酷炫动画效果的10个JavaScript库1) Dynamics.jsDynamics.js是设计基于物理规律的动画的重要Java库。它可以赋予生命给所有包含CSS 和SVG属性的DOM(文本对象模型)元素,换句话说,Dynamics.js适用于所有Java对象以及一系列其它的元素…

php xlsx里插入图片_常见的 PHP 面试题和答案分享

如何直接将输出显示给浏览器&#xff1f;将输出直接显示给浏览器&#xff0c;我们必须使用特殊标记 <&#xff1f;and&#xff1f;>。PHP 是否支持多重继承&#xff1f;PHP 只支持单继承。PHP 的类使用关键字 extends 继承另一个类获取图片属性&#xff08;size, width, …

pandas concat_pandas-数据合并-concat(最全参数解释,含代码和实例)

pandas中的concat的功能&#xff1a;假设你现在需要将多个数据合并&#xff0c;前提是&#xff1a;这几个文件列名都一致&#xff0c;也就是说这几个文件格式完全一样&#xff0c;只是数据不太一样&#xff0c;类似于合并多个文件这种&#xff0c;实际数据分析中也会遇到这种情…

java中的de是什么_【转】java中main函数解析

源地址&#xff1a;http://www.cnblogs.com/xwdreamer/archive/2012/04/09/2438845.html从写java至今&#xff0c;写的最多的可能就是主函数public static void main(String[] args) {}但是以前一直都没有问自己&#xff0c;为什么要这么写&#xff0c;因为在c语言中就没有这样…

JAVA多线程(一)线程安全问题产生的原因

JAVA线程内存与主存间映射示意图Java内存模型中规定了所有的变量都存储在主内存中&#xff0c;每条线程还有自己的工作内存&#xff0c;线程的工作内存中保存了该线程使用的变量到主内存副本拷贝&#xff0c;线程对变量的所有操作&#xff08;读取、赋值&#xff09;都必须在工…

两顶点的路径长度为k_计算两个顶点之间的所有可能路径

两顶点的路径长度为kWhat to Learn? 学什么&#xff1f; How to count all possible paths between two vertices? 如何计算两个顶点之间的所有可能路径&#xff1f; In the graph there are many alternative paths from vertex 0 to vertex 4 在图中&#xff0c;有许多从…

covariance matrix r语言_时间序列分析|ARIMAX模型分步骤详解和R中实践

这是关于时间序列的第N篇文章&#xff0c;本文将介绍ARIMAX模型&#xff0c;简单来说就是在ARIMA的基础上增加一个外生变量。ARIMAX和ARIMA相比在理论上没有太多新的内容&#xff0c;所以本文直接介绍在R里怎么一步一步跑ARIMAX。在阅读这篇文章前&#xff0c;需要对ARIMA有一定…

linux系统编程之文件与I/O(六):fcntl 函数与文件锁

2013-05-14 11:26 8290人阅读 评论(2) 收藏 举报分类&#xff1a;linux系统编程&#xff08;19&#xff09; 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 一、fcntl函数 功能&#xff1a;操纵文件描述符&#xff0c;改变已打开的文件的属性 int…

bandizip最后一个无广告版本_如果非要选择一款压缩软件的话——Bandizip

全世界只有不到0.00~1 % 的人关注了我们得到你的关注是小帮的幸运压缩解压软件是电脑一个必备软甲&#xff0c;前面的文章介绍了一款开源小巧无广告的压缩解压软件windows工具软件选择之压缩软件——7-Zip&#xff0c;如果有人用不惯的话可以试试今天的这款。Bandizip 是一款来…

[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现

新人刚开始学习ASP.NET MVC&#xff0c;若有不足之处希望能得到您的指点&#xff0c;不胜感激&#xff01; 先来一张项目的层级结构图: Model&#xff1a;模型层&#xff0c;主要是各种类型、枚举以及ORM框架&#xff0c;框架完成数据库和实体类的映射。项目中选用了微软的开源…