Python学习笔记34:进阶篇(二十三)pygame的使用之颜色与字体

news2024/9/22 17:17:56

前言

基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。

我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。

私信我发送消息python资料,领取python crash course中文版PDF。

pygame

Pygame是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。

字体颜色

字体颜色其实是两个模块,但是两个模块的内容都不多,一起记录一下。

pygame.Color

pygame.Color模块在Pygame中用于处理颜色。它提供了颜色对象的创建、操作和转换。color对象基本能在pygame中使用颜色的地方进行使用。

基础用法
import pygame
pygame.init()

screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption('Draw Shapes')

# 绘制一个填充的红色矩形,直接填写RGB
pygame.draw.rect(screen, (255, 0, 0), (50, 50, 100, 100))
# 定义一个颜色对象,颜色为蓝色
blue = pygame.Color(0, 0, 255)
# 绘制一个未填充的蓝色矩形
pygame.draw.rect(screen, blue, (50, 150, 100, 100), 3)
# 更新屏幕显示
pygame.display.flip()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

ps: 开始和结束的代码都没写备注,相信大家看起来也没有压力。

在这里插入图片描述

这是正规的创建一个颜色对象并使用的案例,因为我们创建的颜色对象中是使用RGB的值进行定义的,实际上我们使用CSS标准颜色名称,RGBA值或者十六进制字符串也可以创建一个颜色对象。

其他用法
import pygame
pygame.init()

screen = pygame.display.set_mode((1200, 800))
pygame.display.set_caption('Draw Shapes')

# 绘制一个填充的红色矩形,直接填写颜色通道
pygame.draw.rect(screen, (255, 0, 0), (50, 50, 100, 100))

# 定义一个颜色对象,颜色为蓝色
blue = pygame.Color(0, 0, 255)
pygame.draw.rect(screen, blue, (150, 50, 100, 100), 3)

# 前三位是RGB的值,最后一个255则是透明度取值也是0-255
blue_alpha = pygame.Color(0, 0, 255, 255)
pygame.draw.rect(screen, blue_alpha, (150, 150, 100, 100), 3)

# CSS定义一个颜色对象,颜色为绿色
green = pygame.Color('green')
# 绘制一个未填充的蓝色矩形
pygame.draw.rect(screen, green, (250, 50, 100, 100), 3)

# 十六进制
pink = pygame.Color('#FFC0CB')
pygame.draw.rect(screen, pink, (350, 50, 100, 100), 3)

# 更新屏幕显示
pygame.display.flip()

# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

在这里插入图片描述

从代码和执行结果就能看到,实心红色正方形是不创建color对象绘制的图形。后面开始就是RGB,GRBA绘制(放一起上下对比),使用CSS值绘制和最后的使用十六进制字符串的形式绘制,怎么使用按自己喜好就行。

颜色模块主要就是能灵活的创建一个颜色对象去使用,还有其他一些零碎的函数这里不多讲。用的到时候再学习也不迟,我们还没有开始正式实际写完整的项目,这些背太多我个人觉得不是好事。

pygame.font

pygame.font 模块是 Pygame 中用于处理文本渲染的部分。它允许你从系统字体或自定义字体文件创建字体对象,并使用这些对象来渲染文本为图像,以便在游戏中显示。

这个能干嘛就不用我多说了吧。

基础用法
  1. pygame.font.Font(fontfile, size)
    • 功能: 创建一个 Font 对象,可以从文件或系统字体加载。
    • 参数:
      • fontfile (str): 字体文件的路径。如果设置为 None,则使用默认的系统字体。
      • size (int): 字体的大小。
    • 返回值: Font 对象。
  2. Font.render(text, antialias, color, background=None)
    • 功能: 将文本渲染为一个 Surface 对象。
    • 参数:
      • text (str): 要渲染的文本。
      • antialias (bool): 是否使用抗锯齿。
      • color (Color 或 tuple): 文本的颜色。
      • background (Color 或 tuple): 背景颜色,默认为透明。
    • 返回值: Surface 对象,包含了渲染后的文本。

光创建一个字体看不出啥,必须生成一个Surface 对象才能渲染出来,所以两个函数一起使用。使用粉色和默认字体渲染了Hello, Pygame!这句话,具体请看代码。

import pygame

pygame.init()

# 设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 字体颜色
pink = pygame.Color('#FFC0CB')
# 使用默认字体创建一个字体对象
font = pygame.font.Font(None, 32)
text_surface = font.render("Hello, Pygame!", True, pink)

# 填充背景
screen.fill((255, 255, 255))

# 绘制文本
screen.blit(text_surface, (10, 10))

# 更新显示
pygame.display.flip()

# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

在这里插入图片描述

  1. pygame.font.SysFont(name, size, bold=False, italic=False)
    • 功能: 创建一个 Font 对象,从系统字体中加载。
    • 参数:
      • name (str): 系统字体的名称。
      • size (int): 字体的大小。
      • bold (bool): 是否使用粗体样式。
      • italic (bool): 是否使用斜体样式。
    • 返回值: Font 对象。
      这个函数比Font()函数好在可以任意使用系统中其他字体,在你没有自定义字体或者不想使用默认字体的时候,就可以使用这个。
--snip--
# 字体颜色
pink = pygame.Color('#FFC0CB')
# 使用Arial字体创建一个字体对象,32号,加粗,倾斜
font = arial_bold = pygame.font.SysFont('Arial', 32, bold=True, italic=True)
text_surface = font.render("Hello, Pygame!", True, pink)
--snip--

a4e2dd9c2.png)

这里我们就使用了新的系统字体Arial,设置了字体大小32,并且加粗倾斜。

  1. pygame.font.get_fonts()
    • 功能: 返回系统中所有可用字体的名称列表。
    • 参数: 无
    • 返回值: 字符串列表,包含系统字体名称

瞌睡来了就有枕头,我不知道系统有哪些字体怎么办? 用这个函数。

fonts = pygame.font.get_fonts()
for font in pygame.font.get_fonts():
    print(font)

print(len(fonts))

在这里插入图片描述
一共89种,有兴趣的可以自己试试。

  1. pygame.font.Font.size(text)
    • 功能: 返回给定文本在指定字体下的尺寸。
    • 参数:
      • text (str): 文本字符串。
    • 返回值: 一个包含宽度和高度的元组。
# 使用Arial字体创建一个字体对象,32号,加粗,倾斜
font = arial_bold = pygame.font.SysFont('Arial', 32, bold=True, italic=True)
width, height = font.size("Hello, Pygame!")
print(f'Text size: {width}x{height}')

在这里插入图片描述

  1. pygame.font.Font.get_rect(text, width=0, height=0)
    • 功能: 返回一个 Rect 对象,用于定位和对齐文本。
    • 参数:
      • text (str): 文本字符串。
      • width (int): 定位区域的宽度。
      • height (int): 定位区域的高度。
    • 返回值: Rect 对象,可用于定位和对齐文本。

这个函数的作用,就是把你的文字渲染到指定的位置去,不然像例子中,永远在左上角。

import pygame

pygame.init()

# 设置窗口尺寸
screen = pygame.display.set_mode((800, 600))

# 字体颜色
pink = pygame.Color('#FFC0CB')

# 使用Arial字体创建一个字体对象,32号,加粗,倾斜
font = arial_bold = pygame.font.SysFont('Arial', 32, bold=True, italic=True)

# 渲染文本
text_surface = font.render("Hello, Pygame!", True, pink)

# 获取文件的矩形区域
text_rect = text_surface.get_rect()

# 设置文本的顶部居中位置
text_rect.midtop = (screen.get_width() // 2, 10)

# 填充背景
screen.fill((255, 255, 255))

# 绘制文本
screen.blit(text_surface, text_rect)

# 更新显示
pygame.display.flip()

# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

在这里插入图片描述

这样一来,字体就可以在窗口中随意的设定位置了。

结尾

颜色字体通常会一起使用,通过两个模块的组合使用,我们可以在游戏中设定各种颜色的字体并将它们放置在合适的位置,颜色也有和图形绘制一起的使用的时候,比如收到攻击是屏幕红框警告就可以这样编写。

总而言之,熟练掌握应用颜色字体模块对我们编写小游戏还是很重要的,要多尝试几遍,熟悉常用的几个函数。

作业

  1. 创建9个字体,使用9中颜色分别渲染,最后放置在左上角,顶部居中,右上角,左部居中,窗口居中,右部居中,左下角,底部居中,右下角等九个位置上。

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

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

相关文章

算法训练营day28--134. 加油站 +135. 分发糖果+860.柠檬水找零+406.根据身高重建队列

一、 134. 加油站 题目链接:https://leetcode.cn/problems/gas-station/ 文章讲解:https://programmercarl.com/0134.%E5%8A%A0%E6%B2%B9%E7%AB%99.html 视频讲解:https://www.bilibili.com/video/BV1jA411r7WX 1.1 初见思路 得模拟分析出…

【Python实战因果推断】19_线性回归的不合理效果9

目录 De-Meaning and Fixed Effects Omitted Variable Bias: Confounding Through the Lens of Regression De-Meaning and Fixed Effects 您刚刚看到了如何在模型中加入虚拟变量来解释不同组间的不同干预分配。但是,FWL 定理真正的亮点在于虚拟变量。如果您有大量…

鸿蒙架构之AOP

零、主要内容 AOP 简介ArkTs AOP 实现原理 JS 原型链AOP实现原理 AOP的应用场景 统计类: 方法调用次数统计、方法时长统计防御式编程:参数校验代理模式实现 AOP的注意事项 一、AOP简介 对于Android、Java Web 开发者来说, AOP编程思想并不…

【前端】包管理器:npm、Yarn 和 pnpm 的全面比较

前端开发中的包管理器:npm、Yarn 和 pnpm 的全面比较 在现代前端开发中,包管理器是开发者必不可少的工具。它们不仅能帮我们管理项目的依赖,还能极大地提高开发效率。本文将详细介绍三种主流的前端包管理器:npm、Yarn 和 pnpm&am…

错位情缘悬疑升级

✨🔥【错位情缘,悬疑升级!关芝芝与黄牡丹的惊世婚约】🔥✨在这个迷雾重重的剧场,一场前所未有的错位大戏正悄然上演!👀 你没看错,昔日兄弟的前女友关芝芝,竟摇身一变成了…

axios使用sm2加密数据后请求参数多了双引号解决方法

axios使用sm2加密数据后请求参数多了双引号解决 背景问题描述解决过程 背景 因项目安全要求,需对传给后端的入参加密,将请求参数加密后再传给后端 前期将axios降低到1.6.7后解决了问题,但最近axios有漏洞,安全要求对版本升级&…

通过电压差判定无源晶振是否起振正确吗?

在电子工程中,无源晶振作为许多数字电路的基础组件,其是否成功起振对于系统的正常运行至关重要。然而,通过简单检测晶振两端的电压差来判断晶振是否工作,这一方法存在一定的误区,晶发电子将深入探讨这一话题&#xff0…

【AIGC】一、本地docker启动私有大模型

本地docker启动私有大模型 一、最终效果中英文对话生成代码 二、资源配置三、搭建步骤启动docker容器登录页面首次登录请注册登录后的效果 配置模型尝试使用选择模型选项下载模型选择适合的模型开始下载 试用效果返回首页选择模型中英文对话生成代码 四、附录资源监控 五、参考…

浮点类型使用陷阱

引言 当我们进行条件判断时,经常会遇到两个数是否相等的情况,但如果在程序中进行判断一个可以除尽的小数和数学上除出来所得的数是否相等时,就会神奇的发型居然不相等??! 遇到问题 看如下代码 double num5 2.7;//2.7double num6 8.1 / 3;//接近2.7System.out.println(n…

NAS免费用,鲁大师 AiNAS正式发布,「专业版」年卡仅需264元

7月10日,鲁大师召开新品发布会,正式发布旗下以“提供本地Ai部署和使用能力以及在线NAS功能”并行的复合软件产品:鲁大师 AiNAS。 全新的鲁大师 AiNAS将持续满足现如今大众对于数字化生活的全新需求,将“云存储”的便捷与NAS的大容…

学圣学最终的目的是:达到思无邪的状态( 纯粹、思想纯正、积极向上 )

学圣学最终的目的是:达到思无邪的状态( 纯粹、思想纯正、积极向上 ) 中华民族,一直以来,教学都是以追随圣学为目标,所以中华文化也叫圣学文化,是最高深的上等学问; 圣人那颗心根本…

如何配置yolov10环境?

本文介绍如何快速搭建起yolov10环境,用于后续项目推理、模型训练。教程适用win、linux系统 yolo10是基于yolo8(ultralytics)的改进,环境配置跟yolo8几乎一模一样。 目录 第1章节:创建虚拟环境 第2章节:…

tesla p100显卡显示资源不足,api调用失败

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

数据结构JAVA

1.数据结构之栈和队列 栈结构 先进后出 队列结构 先进先出 队列 2.数据结构之数组和链表 数组结构 查询快、增删慢 队列结构 查询慢、增删快 链表的每一个元素我们叫结点 每一个结点都是独立的对象

浅谈“不要卷模型,要卷应用”

目录 1.概述 2.AI技术应用场景探索 3.避免超级应用陷阱的策略 3.1.追求DAU的弊端 3.2.平衡用户活跃度与应用实用性的策略 4.个性化智能体开发 4.1. 用户需求分析与数据收集 4.2. 技术选择与开发 4.3. 个性化算法设计 4.4. 安全性与隐私保护 4.5. 多渠道集成与响应机…

《昇思25天学习打卡营第14天|计算机视觉-ShuffleNet图像分类》

FCN图像语义分割&ResNet50迁移学习&ResNet50图像分类 当前案例不支持在GPU设备上静态图模式运行,其他模式运行皆支持。 ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型,和MobileNet, SqueezeNet等一样主要应用在移动端…

GraphGNSSLib Series[2]:在CLion中不同Node间进行debug

CLion实现Node debug 步骤: 我了解到的node,大多是通过终端运行,但是使用clion不断debug断点进行调试一直使我很苦恼,所以此次记录一下如何通过clion实现node节点之间通过publisher以及subscriber进行节点话题间的发布与通信&…

App H5+ 实现下载、查看功能 前后端实现(SpringBoot)

<!doctype html><html><head><meta charset"utf-8"><title>维修指南</title><meta name"viewport" content"widthdevice-width, initial-scale1.0, minimum-scale0, maximum-scale0.85, user-scalableyes&quo…

TotalSegmentator---针对CT/MRI数据的自动分割

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ&#xff1a;870202403 公众号&#xff1a;VTK忠粉 前言 本文分享开源软件TotalSegmentator&#xff0c;该开源项目针对CT/MRI数据类型&#xff0c;对主要的解剖学结构进行自动分割&#xff0c;并且被集成到MITK中。希望对各…

GB28181设备如何添加

简介 此篇描述视频网关&#xff08;中间件&#xff09;接入大华、海康、ONVIF设备&#xff08;NVR、摄像头&#xff09;、GB28181设备步骤和流程。 阅读本文档之前建议先阅览视频网关&#xff08;中间件&#xff09;用户使用手册。 接入方式和说明 视频网关&#xff08;中间…