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 …

Java ClassLoader setPackageAssertionStatus()方法与示例

ClassLoader类setPackageAssertionStatus()方法 (ClassLoader Class setPackageAssertionStatus() method) setPackageAssertionStatus() method is available in java.lang package. setPackageAssertionStatus()方法在java.lang包中可用。 setPackageAssertionStatus() metho…

java上传kafka的方法_哪种方法是将所有数据从Kafka主题复制到接收器(文件或Hive表)的最佳方法?...

我正在使用Kafka Consumer API将所有数据从Kafka主题复制到Hive表 . 为此,我使用HDFS作为中间步骤 . 我使用唯一的组ID并将偏移重置为“最早”,以便从头开始获取所有数据,并在执行后忽略提交 . 然后我遍历Kafka主题中的记录,并将每…

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内,进入到…

Java ClassLoader setDefaultAssertionStatus()方法与示例

ClassLoader类setDefaultAssertionStatus()方法 (ClassLoader Class setDefaultAssertionStatus() method) setDefaultAssertionStatus() method is available in java.lang package. setDefaultAssertionStatus()方法在java.lang包中可用。 setDefaultAssertionStatus() metho…

【风马一族_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 库是专门用于开发…

c# 2维数组 取一维_C#| 不同类型的一维数组声明

c# 2维数组 取一维In the below example, we are declaring an integer array (one dimensional) with following styles: 在下面的示例中,我们声明具有以下样式的整数数组(一维) : 1) One dimensional Array declaration with initialization (without…

Java编程经典10道_Java经典编程题50道之十二

企业发放的奖金根据利润提成:利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成, 高于10万元的部分 ,可提成7.5%;20万到40万之间时&am…

RHEL7 单独安装图形 X11

RHEL7 默认是最小化安装(Minimal Install),没有图形界面, 我们应该选择Server with GUI。若已错过此步骤,我们采用以下方式补充安装GUI界面。 先配置yum源可以参考我的这篇文章http://blog.itpub.net/27771627/viewspa…

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

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

Kotlin程序用于打印JVM版本的Kotlin(打印Java属性)

Here, we will create a Kotlin program to print Kotlin, JVM version (printing Java properties). As Kotlin can be seen as an upgrade of Java, so we will get all versions of java (JVM) using Kotlin also. 在这里,我们将创建一个Kotlin程序以打印JVM版本…

自定义动画属性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, …

java调用构造函数中某一个值_Java如何在枚举的构造函数中调用另一个枚举值

Java中的枚举(enum)是一种存储一组常量值的数据类型。您可以使用枚举来存储固定值&#xff0c;例如一周中的天&#xff0c;一年中的月等。您可以使用关键字 enum定义枚举&#xff0c;后跟枚举的名称为-enum Days {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATUR…