Pygame学习笔记 3 —— surface对象

本文详细介绍了Pygame中的字体模块,如何创建Font对象和绘制文字。接着讲解了Surface对象的本质和常见用途,以及如何利用它进行像素操作。最后,探讨了Draw模块,展示了绘制线条、形状等方法,并给出了实例代码,帮助读者更好地理解和运用Pygame进行游戏开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在刚开始接触pygame模块的时候就提过surface这个词了,我们在窗口绘制的字体、图片都是surface对象。接下来我们学习如何在窗口绘制各种文字、图片和几何图形。
在这里插入图片描述
主要内容: 字体模块、surface对象、Draw模块


一、字体模块

  游戏一般都包含文字,连超级玛丽都有金币数量的数字显示和play按钮,为了交互友好,有必要在游戏中添加必要的文字,而pygame的font模块可以用来生成Font对象。

step1: 创建Font对象
1、初始化font模块

pygame.font.init()

  这个初始化过程由pygame.init()自动调用,当然如果手动调用也是阔以哒。与初始化对应的还有pygame.font.quit(),这个函数也是有pygame.init()自动调用的。

2、在使用字体之前,首先需要创建font对象,主要有以下方法:

# 方法一:使用系统自带的字体创建Font object
my_font = pygame.font.SysFont("arial", 16)
# 方法二:使用特定的字体文件创建Font object
my_font = pygame.font.Font("file_name.ttf", 16)

  对于第一种方法,"Arial"字体在很对系统中都是存在的,若不存在则使用系统的第一个默认字体来替换。 对于第二种方法,如果将ttf字体文件存放在工程文件夹则不论在哪一台电脑运行程序都能正常运行,且字体一致。

3、在不知道使用什么字体时,可以查看所有可用字体

fonts = pygame.font.get_fonts()

pygame.font.get_fonts():返回一个字符串列表,列表包含了所有可用字体的小写名称

step2: 写文字
  pygame没有提供直接在现成surface对象上绘制文字的方法,但render函数可以返回一个绘制了文字的surface对象,可以将此对象blit在其他其他特定的surface对象上:

color = (255, 0, 0)
my_font = pygame.font.SysFont("arial", 32)
# render(text, antialias, color, background=None) -> Surface
rendered = my_font.render("Pygame", 0, red)

第一个参数为字符串,即绘制的文字内容;第二个参数是个布尔值,为True表示开启抗锯齿,得到的文字比较平滑,不过相应的速度有一点点影响;第三个参数为颜色。

举个栗子: 绘制文字并保存为图片文字
以下程序可以将"Pygame"绘制在新的surface上并保存为png图片,使用pygame.image.save可以保存surface对象

import sys, pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((640,480), 0, 32)

# 绘制字体surface
sysFont = pygame.font.SysFont("arial", 32)
rendered = sysFont.render("Pygame", 0, (255,100,100))
pygame.image.save(redered, "font.png")


二、surface对象

在前面,很多次提到了surface对象:

  • pygame.display.set_mode() 返回值是一个surafce对象 0.0
  • pygame.image.load(“imag.png”) 也是得到一个surface对象 (⊙o⊙)?
  • pygame.font.SysFont().render(“text”, colot, 0, red) 得到的还是surface对象 ○| ̄|_

所以,surface对象到底是什么呢?
  surface对象其实是是矩形的2D图像,pygame的窗口中,除了窗口边框、按钮、标题栏,剩下的矩形就是surface对象啦,说简单点surface就是一种图片。有了surface对象后,绘制图片文字的适合只需要blit一下就好了,利用图片覆盖和游戏主循环的不断刷新就可以得到我们想要的效果。

surface 模块常用函数

# Surface((width, height)) -> Surface
my_rect = pygame.Surface(width, height)

# 查看图片位置
surface = pygame.image.load("xxx.png")
rect = surface.get_rect()
rect.topleft = topleft

# 转换 -> Surface
surface1= pygame.image.load("image.png")</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值