Python游戏开发入门:pygame色彩与绘图机制-4

简介: Python游戏开发入门:pygame色彩与绘图机制-4

Pygame色彩与绘制机制

• Pygame色彩机制
• Pygame图形绘制机制
• Pygame文字绘制机制
• Pygame绘制机制原理精髓

Pygame色彩机制

色彩表达

Color类用于表达色彩,使用RGB或RGBA色彩模式,A可选
Color类可以用色彩名字、RGBA值、HTML色彩格式等方式定义
pygame.Color
Color(name) 例如:Color("grey")
Color(r,g,b,a) 例如:Color(190, 190, 190, 255)
Color(rgbvalue) 例如:Color("#BEBEBEFF")
红绿蓝三个通道颜色组合
• 覆盖视力所能感知的所有颜色
• RGB取值范围0-255

英文名称 R.G.B. 中文名称


white 255 255 255 白色
black 0 0 0 黑色
grey 190 190 190 灰色
darkgreen 0 100 0 深绿色
gold 255 215 0 金色
violet 238 130 238 紫罗兰
purple 160 32 240 紫色

RGBA色彩模式


• RGB色彩模式之外增加了第四维度:alpha通道
• alpha通道表示不透明度,取值0-255,默认255
• alpha通道值越大,不透明度越高,255表示不透明

pygame.Color类


pygame.Color.r 获得Color类的红色值r
pygame.Color.g 获得Color类的绿色值g
pygame.Color.b 获得Color类的蓝色值b
pygame.Color.a 获得Color类的不透明度值a
pygame.Color.normalize 将RGBA各通道值归一到0-1之间

Pygame图形绘制机制

图形绘制


向屏幕上绘制一些简单的图形,如直线、圆形、椭圆等
任何一个图形绘制后,会返回一个矩形Rect类表示该形状
pygame.draw
圆形绘制后,用Rect类表示

Rect类


表达一个矩形区域的类,用于存储坐标和长度信息
Pygame利用Rect类来操作图形/图像等元素
pygame.Rect
四个参数如下:
left, top, width, height
Rect类提供了如下属性,返回一个数值或一个代表坐标的元组
pygame.Rect
x, y, w, h, size, width, height
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
Rect类提供了如下方法,用来操作Rect类
pygame.Rect
.copy(), .move(), .inflate(), .clamp(), .clip(),
.union(), .unionall(), .fit(),
.normalize(), .contains(), .collidepoint()
.colliderect(), .collidelist(), .collidelistall(),
.collidedict(), .collidedictall()

图形绘制


pygame.draw
.rect() 矩形
.polygon() 多边形
.circle() 圆形
.ellipse() 椭圆形
.arc() 椭圆弧形
.line() 直线
.lines() 连续多线
.aaline() 无锯齿线
.aalines() 连续无锯齿线

矩形绘制


pygame.draw.rect(Surface, color, Rect, width=0)
• Surface 矩形的绘制屏幕
• color 矩形的绘制颜色
• Rect 矩形的绘制区域
• width=0 绘制边缘的宽度,默认为0,即填充图形

多边形绘制


pygame.draw.polygon(Surface, color, pointlist, width=0)
• Surface 多边形的绘制屏幕
• color 多边形的绘制颜色
• pointlist多边形顶点坐标列表
• width=0 绘制边缘的宽度,默认为0,即填充图形

圆形绘制


pygame.draw.circle(Surface, color, pos, radius, width=0)
• Surface 圆形的绘制屏幕
• color 圆形的绘制颜色
• pos 圆形的圆心坐标
• radius 圆形的半径
• width=0 绘制边缘的宽度,默认为0,即填充图形

椭圆形绘制


pygame.draw.ellipse(Surface, color, Rect, width=0)
• Surface 椭圆形的绘制屏幕
• Color 椭圆形的绘制颜色
• Rect 椭圆形的绘制区域
• width=0 绘制边缘的宽度,默认为0,即填充图形

椭圆弧形绘制


pygame.draw.arc(Surface, color, Rect, start_angle,
stop_angle, width=0)
• Surface 椭圆弧形的绘制屏幕
• Color 椭圆弧形的绘制颜色
• Rect 椭圆弧形的绘制区域
• start_angle, stop_angle 弧形绘制起始和结束弧度值
• width=0 绘制边缘的宽度,默认为0,即填充图形

直线绘制


pygame.draw.line(Surface, color, start_pos, end_pos, width=1)
• Surface 直线的绘制屏幕
• Color 直线的绘制颜色
• start_pos, end_pos 直线的起始和结束坐标
• width=1 直线的宽度,默认值为1

连续多线绘制


pygame.draw.lines(Surface, color, closed, pointlist, width=1)
• Surface 连续多线的绘制屏幕
• Color 连续多线的绘制颜色
• closed 如果为True,起止节点间自动增加封闭直线
• pointlist连续多线的顶点坐标列表
• width=1 连续多线的宽度,默认值为1

无锯齿线绘制


pygame.draw.aaline(Surface, color, start_pos, end_pos, blend=1)
• Surface 无锯齿线的绘制屏幕
• Color 无锯齿线的绘制颜色
• start_pos, end_pos 无锯齿线的起始和结束坐标
• blend=1 不为0时,与线条所在背景颜色进行混合

连续无锯齿线绘制


pygame.draw.aalines(Surface, color, closed, pointlist, blend=1)
• Surface 连续无锯齿线的绘制屏幕
• Color 连续无锯齿线的绘制颜色
• closed 如果为True,起止节点间自动增加封闭直线
• pointlist连续无锯齿线的顶点坐标列表
• blend=1 不为0时,与线条所在背景颜色进行混合

Pygame文字绘制机制

文字绘制


向屏幕上绘制特定字体的文字
文字不能直接print() ,而是用像素根据字体点阵图绘制
pygame.freetype
Windows系统
C:\Windows\Fonts
字体文件的扩展名
*.ttf *.ttc

文字绘制机制简介


pygame.freetype
pygame.freetype.Font
根据字体和字号生成
一个Font对象
Font.render_to()
用Font对象的render*方
法绘制具体文字

Font类


pygame.freetype.Font(file, size=0)
• file 字体类型名称或路径
• size 字体的大小

Font类的绘制方法(1)


Font.render_to(surf, dest, text, fgcolor=None,
bgcolor=None, rotation=0, size=0) —> Rect
surf 绘制字体的平面,Surface对象
• dest 在平面中的具体位置,(x,y)
• text 绘制的文字内容
• fgcolor 文字颜色
bgcolor 背景颜色
• rotation 逆时针的旋转角度,取值0-359,部分字体可旋转
• size 文字大小,赋值该参数将覆盖Font中的设定值
Rect 返回一个Rect对象

Font类的绘制方法(2)


Font.render(text, fgcolor=None, bgcolor=None,
rotation=0, size=0) —> (Surface, Rect)
• text 绘制的文字内容
• fgcolor, bgcolor 字体颜色、背景颜色
• rotation 逆时针的旋转角度,取值0-359,部分字体可旋转
• size 文字大小,赋值该参数将覆盖Font中的设定值
返回一个元组,包含Surface对象和Rect对象

Pygame绘图机制原理精髓

理解Pygame的两个重要类型
pygame.Surface 
绘图层,或绘图平面,或图层
• 用于表示图形、文字或图像的绘制效果
• 与当前屏幕主图层可以并列存在
• 如果不绘制在主图层上,则不会被显示

pygame.Rect


矩形区域
• 对应于当前主图层的某个具体区域
• 相当于某个矩形区域的指针或标识信息
• 可以指定图层绘制在某个矩形区域中
主图层
由pygame.display.set_mode((width, height))生成的Surface对象
在主图层上绘制其他图层使用.blit(pygame.Surface, pygame.Rect)方法
pygame.Surface包含某个图形的图层
pygame.Rect定位某个区域

代码示例

图形绘制


# -*- coding: utf-8 -*-
# @File    : pygame_draw.py
# @Date    : 2018-05-24
from math import pi
import pygame,sys
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pygame图形绘制")
GOLD = 255, 251, 0
RED = pygame.Color('red')
WHITE = 255, 255, 255
GREEN = pygame.Color('green')
# 绘制矩形
# r1rect = pygame.draw.rect(screen, GOLD, (100,100,200,100), 5)
# r2rect = pygame.draw.rect(screen, RED, (210,210,200,100), 0)
# 绘制笑脸
e1rect = pygame.draw.ellipse(screen, GREEN, (50,50,500,300), 3)
c1rect = pygame.draw.circle(screen, GOLD, (200,180), 30, 5)
c2rect = pygame.draw.circle(screen, GOLD, (400,180), 30)
r1rect = pygame.draw.rect(screen, RED, (170,130, 60, 10), 3)
r2rect = pygame.draw.rect(screen, RED, (370,130, 60, 10))
plist = [(295,170), (285,250), (260,280), (340,280), (315,250), (305,170)]
l1rect = pygame.draw.lines(screen, GOLD, True, plist, 2)
al1rect = pygame.draw.aalines(screen, GOLD, True, plist, 2)
a1rect = pygame.draw.arc(screen, RED, (200,220,200,100), 1.4*pi, 1.9*pi, 3)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
    pygame.display.update()

image.png

文字绘制


# -*- coding: utf-8 -*-
# @File    : pygame_text.py
# @Date    : 2018-05-25
import pygame,sys
import pygame.freetype
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pygame文字绘制")
GOLD = 255, 251, 0
f1 = pygame.freetype.Font('C://Windows//Fonts//msyh.ttc', 36) #微软雅黑
# 方式一:
f1rect = f1.render_to(screen, (200,100), "世界和平", fgcolor=GOLD, size=50)
# 方式二:
f2surf, f2rect = f1.render("宇宙和谐", fgcolor=GOLD, size=50)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        screen.blit(f2surf, (200, 200))
        pygame.display.update()
相关文章
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
5天前
|
人工智能 编译器 Python
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
python已经安装有其他用途如何用hbuilerx配置环境-附带实例demo-python开发入门之hbuilderx编译器如何配置python环境—hbuilderx配置python环境优雅草央千澈
|
1月前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
1月前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
40 7
|
1月前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
45 5
|
1月前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
79 3
|
1月前
|
Python
Python编程入门:从零开始的代码旅程
本文是一篇针对Python编程初学者的入门指南,将介绍Python的基本语法、数据类型、控制结构以及函数等概念。文章旨在帮助读者快速掌握Python编程的基础知识,并能够编写简单的Python程序。通过本文的学习,读者将能够理解Python代码的基本结构和逻辑,为进一步深入学习打下坚实的基础。
|
8月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
109 1
|
3月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
106 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
|
3月前
|
IDE 开发工具 iOS开发
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
本篇将详细介绍如何在Mac系统上安装Python,并配置Python开发环境。内容涵盖Python的安装、pip包管理工具的配置与国内镜像源替换、安装与配置PyCharm开发工具,以及通过PyCharm编写并运行第一个Python程序。通过本篇的学习,用户将完成Python开发环境的搭建,为后续的Python编程工作打下基础。
336 2
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
下一篇
开通oss服务