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.pswp.cn/news/542601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542601.shtml
英文地址,請注明出處:http://en.pswp.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…