首頁 > 軟體

Python Color類與文字繪製零基礎掌握

2022-08-05 22:01:21

視訊

觀看視訊

pygame.Color

Pygame 中用於描述顏色的物件。

Color(name) -> Color,例如:Color("gray")

Color(r, g, b, a) -> Color,例如:Color(190, 190, 190, 255)

Color(rgbvalue) -> Color,例如:Color("#BEBEBEFF")

w3schools顏色選擇器,選擇任何你想要的顏色,你可以在這裡找到它

Pygame 使用 Color 類表示 RGBA 顏色值,每個顏色值的取值範圍是 0 ~ 255。當沒有給出 alpha 的值時,預設是 255(不透明)

“RGB值”可以是一個顏色名,一個 HTML 顏色格式的字串,一個 16 進位制數的字串,或者一個整型畫素值。HTML 格式是 #rrggbbaa,其中 “rr”,“gg”,“bb”,“aa” 都是 2 位的 16 進位制數。代表 alpha 的 “aa” 是可選的。16 進位制數的字串組成形式為 0xrrggbbaa,當然,其中的 “aa” 也是可選的

下列程式可以列出pygame預定義的顏色

from pprint import pprint
import pygame as pg
pprint(pg.color.THECOLORS)

方法&屬性

pygame.Color.r — 獲取或設定 Color 物件的紅色值

pygame.Color.g — 獲取或設定 Color 物件的綠色值

pygame.Color.b — 獲取或設定 Color 物件的藍色值

pygame.Color.a — 獲取或設定 Color 物件的 alpha 值,透明度

pygame.Color.cmy — 獲取或設定 Color 物件表示的 CMY 值

pygame.Color.hsva — 獲取或設定 Color 物件表示的 HSVA 值

pygame.Color.hsla — 獲取或設定 Color 物件表示的 HSLA 值

pygame.Color.i1i2i3 — 獲取或設定 Color 物件表示的 I1I2I3 值

pygame.Color.normalize() — 返回 Color 物件的標準化 RGBA 值

pygame.Color.correct_gamma() — 應用一定的伽馬值調整 Color 物件

pygame.Color.set_length() — 設定 Color 物件的長度(成員數量)

範例

讓視窗的背景不斷變化

import pygame, sys
pygame.init()
screen_size = 640, 480
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption("pygame顏色")
GOLD = (255,251,0)
RED = pygame.Color('red')
WHITE = (255, 255, 255)
GREEN = pygame.Color('green')
color_list = [GOLD,RED,WHITE,GREEN]
fclock = pygame.time.Clock()
running = True
i = 0
while running:
	fclock.tick(1)
	for e in pygame.event.get():
		if e.type == pygame.QUIT:
			running = False
	i = i + 1
	i = 0 if i > 3 else i
	screen.fill(color_list[i])
	pygame.display.flip()
pygame.quit()

Rect物件與Surface物件區別

pygame.Surface表示繪製層、或繪圖平面、或圖層,用於表示圖層、文字或影象的繪製效果,如果不繪製在主圖層上,則不會被顯示。

pygame.display.set_mode()生成主圖層,是一個Surface物件,在主圖層上繪製其它圖層使用blit()方法

pygame.draw繪製圖形後,返回一個矩形Rect類表示形狀,

pygame.Rect表達一個矩形區域的類,Pygame利用Rect類來操作圖形、影象、文字等資訊。對應於當前主圖層的某個區域,指定圖層繪製的矩形區域。

文字的繪製

系統字型所在位置:

複製微軟雅黑到“fonts”資料夾

pygame.freetype類:向螢幕上繪製特定字型的文字,文字不能直接用print(), 而是用畫素根據字型點陣圖繪製

pygame 包在載入時不會自動匯入freetype。必須顯式匯入此模組才能使用。

import pygame
import pygame.freetype

pygame 1.9.2 中的新功能:freetype

常用的方法

1. pygame.freetype.Font

從支援的字型檔案建立一個新的Font範例。

Font(file, size=0, font_index=0, resolution=0, ucs4=False) -> Font

引數:

file可以是表示字型檔名的字串,包含字型的類檔案物件,也可以是None;如果為None,則使用預設的Pygame字型。

(可選)可以指定size引數來設定文字的預設大小,這決定了渲染字元的大小。大小也可以顯式傳遞給每個方法呼叫。由於快取系統的工作方式,在建構函式上指定預設大小並不意味著在每次函數呼叫上手動傳遞大小都會帶來效能提升。如果字型是點陣圖並且沒有給出大小,則預設大小設定為字型的第一個可用大小。

2. pygame.freetype.Font.render()

將渲染文字作為surface返回

render(text, fgcolor=None, bgcolor=None, style=STYLE_DEFAULT, rotation=0, size=0) -> (Surface, Rect)

返回一個新的Surface,文字以’fgcolor’給出的顏色呈現給它。如果沒有給出前景色,則使用預設前景色fgcolor。如果給出bgcolor,Surface將用這種顏色填充。

返回值是一個元組:新Surface和邊界矩形給出渲染文字的大小和原點。

如果為文字傳遞空字串,則返回的Rect為零寬度和字型高度。

3. pygame.freetype.Font.render_to() 將文字渲染到現有surface上 render_to(surf, dest, text, fgcolor=None, bgcolor=None, style=STYLE_DEFAULT, rotation=0, size=0) -> Rect 將字串文字呈現給pygame.Surface物件,位於dest,(x,y)表面座標對。如果x或y不是整數,則儘可能將其轉換為整數。接受前兩個項是x和y位置元素的任何序列,包括Rect範例。與render()一樣,可以選擇fgcolor,style,rotation和size引數。

def word_wrap(surf, text, font, color=(0, 0, 0)):
    font.origin = True
    words = text.split(' ')
    width, height = surf.get_size()
    line_spacing = font.get_sized_height() + 2
    x, y = 0, line_spacing
    space = font.get_rect(' ')
    for word in words:
        bounds = font.get_rect(word)
        if x + bounds.width + bounds.x >= width:
            x, y = 0, y + line_spacing
        if x + bounds.width + bounds.x >= width:
            raise ValueError("word too wide for the surface")
        if y + bounds.height - bounds.y >= height:
            raise ValueError("text to long for the surface")
        font.render_to(surf, (x, y), None, color)
        x += bounds.width + space.width
return x, y

文字版的小球遊戲

import pygame, sys
import pygame.freetype
pygame.init()
size = screen_width, screen_height = 640, 480
screen = pygame.display.set_mode(size)
pygame.display.set_caption('文字遊戲')
BLACK = pygame.Color('black')
GOLD = (255,251,0)
font1 = pygame.freetype.Font("C://Windows//Fonts//msyh.ttc", 28)
font_surface,font_rect = font1.render("小小工坊", fgcolor=GOLD, size=50)
pos = [screen_width // 2, screen_height // 2]
speed = [1,1]
fps = 60
fclock = pygame.time.Clock()
while True:
	fclock.tick(fps)
	for e in pygame.event.get():
		if e.type == pygame.QUIT:
			sys.exit()
	if pos[0] < 0 or pos[0] + font_rect.width > screen_width:
		speed[0] = -speed[0]
	if pos[1] < 0 or pos[1] + font_rect.height > screen_height:
		speed[1] = -speed[1]
	pos[0] = pos[0] + speed[0]
	pos[1] = pos[1] + speed[1]
	screen.fill(BLACK)
	screen.blit(font_surface,(pos[0],pos[1]))
	pygame.display.update()

到此這篇關於Python Color類與文字繪製零基礎掌握的文章就介紹到這了,更多相關Python Color類與文字繪製內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com