Pygame 教程(2):重要的概念及对象

article/2025/10/3 17:43:37

本章,将介绍 Pygame 中的重要概念及对象。

导航

上一章:创建第一个应用程序
下一章:绘制图形

文章目录

  • 导航
  • 像素坐标
  • Rect 对象
  • Color 对象
  • Surface 对象
  • 实例:矩形生成器
    • 创建初始窗口
    • 创建生成矩形的函数
    • 调用函数
    • 完整代码
  • 结语

像素坐标

Pygame 所创建的窗口,其实只是屏幕上的像素(pixel)组合而成的。最开始每个像素都是黑色的,但是可以在渲染过程中设置为不同的颜色。

大多数游戏框架,包括 Pygame,使用平面直角坐标系来表示特定的坐标。而在 Pygame 中,左上角的像素坐标记作 (0, 0),向右x坐标递增,向下y坐标递增,反之亦然。

Rect 对象

Pygame 中会经常用到pygame.Rect对象,它用于存储矩形坐标。在构造函数中,通常需要传入矩形的x坐标、y坐标、长和宽。

大多数以Rect对象作为参数的 Pygame 函数,都支持用其他的方式来表示矩形坐标。如pygame.Rect(10, 10, 20, 30)也可以用元组表示为(10, 10, 20, 30)((10, 10), (20, 30))等。

Pygame 为Rect对象定义了很多属性及方法,在此不做赘述,请参见官方文档。

Color 对象

在 Pygame 中,使用 R(red) G(green) B(blue) 模式表示颜色,其中每个值都在 0~255 的范围内,特别地,当需要指定透明值 A(alpha) 时,使用 RGBA 表示颜色。在 RGB 模式下,(0, 0, 0) 表示黑色,(255, 255, 255) 表示白色。

Pygame 定义了pygame.Color对象。与pygame.Rect类似,pygame.Color也可以表示为三元(RGB)或四元(RGBA)元组。详见官方文档。

Surface 对象

Pygame 中另一个常用的对象就是pygame.Surface对象,用于表示图像。可以在构造函数中传入一个元组以指定图像的大小。

Pygame 中很多 2D 元素都是Surface对象,如渲染的文本、加载的图片、Pygame 精灵等。

值得一提的是,其实显示屏幕,即pygame.display.set_mode返回的也是Surface对象。这意味着,你可以像操作普通的图像一样操作显示屏幕,例如绘制图形、填充等。而之所以 Pygame 的显示屏幕默认是黑色的,也是因为pygame.Surface对象会默认将背景填充为黑色。

pygame.Surface对象也定义了许多的方法以操作图像,常用的方法如下表所示:

方法定义方法作用
pygame.Surface.get_size() -> (width, height)返回此图像的大小。
pygame.Surface.get_rect(**kwargs) -> Rect返回此图像对应的矩形对象。未传入参数时,该矩形以(0, 0)作为左上角坐标。当传入键值参数时,可以为创建的矩形指定特定的属性:如get_rect(center=(100, 100))将返回一个以(100, 100)作为中心的矩形。
pygame.Surface.copy() -> Surface返回此图像的副本。
pygame.Surface.fill(color, rect=None, special_flags=0) -> Rect为图像填充一个颜色,返回受影响的区域的矩形坐标。如果传入rect参数,将指定填充的区域。special_flags可以指定图像与填充颜色混合的方式,此特性比较复杂,在此不做解释,详见官方文档。
pygame.Surface.blit(source, dest, area=None, special_flags=0) -> Rect将指定的图像绘制到此图像上,返回受影响的区域的矩形坐标。source指定要绘制到此图像的源图像。dest可以为一个表示源图像绘制位置的左上角坐标的二元元组,也可以为一个pygame.Rect对象,此时,矩形的左上角坐标表示绘制的位置,但是绘制时将会忽略矩形的大小,而不是根据矩形的大小拉伸源图像!area参数也是一个pygame.Rect对象,可以截取源图像的一部分再绘制到此图像上。special_flags参数,同pygame.Surface.fill方法,详见官方文档。

实例:矩形生成器

为使读者能够更加透彻地了解上述知识,我们将创建一个随机生成矩形的程序。

请创建一个新的文件,命名为rect_generator.py

创建初始窗口

像上一章一样创建初始窗口,代码如下:

import random
import sysimport pygamepygame.init()SCREEN = pygame.display.set_mode((600, 600))
pygame.display.set_caption('Rect Generator')while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()pygame.display.update()

与之前不同的是,我们导入了random库,该模块可用于生成随机数。

创建生成矩形的函数

添加生成矩形的函数,代码如下:

def generate():left = random.randint(0, 400)top = random.randint(0, 400)width = random.randint(0, 200)height = random.randint(0, 200)color = (random.randint(0, 255), random.randint(0, 255),random.randint(0, 255))surf = pygame.Surface((width, height))surf.fill(color)SCREEN.blit(surf, (left, top))

上述代码中:

  • lefttop限制在 0~400 之间,把widthheight限制在 0~200 之间,这样可以防止矩形超出窗口。
  • random.randint(0, 255)为 RGB 每个值创建一个随机数,以生成一个随机的颜色。
  • 创建了一个指定大小的pygame.Surface对象,填充为指定的颜色。
  • surf绘制到显示屏幕上,把位置设置为(left, top)

调用函数

在游戏循环中调用生成矩形的函数,代码如下:

while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# SCREEN.fill((0, 0, 0))generate()  # 调用生成矩形的函数pygame.display.update()

上述代码,并没有在调用generate函数之前调用fill函数,如果调用了,则每一次循环都会以指定颜色填充屏幕,此时运行效果为矩形在窗口上跳动,而非一个个矩形叠加在窗口上,读者可以自行尝试。

完整代码

import random
import sysimport pygamepygame.init()SCREEN = pygame.display.set_mode((600, 600))
pygame.display.set_caption('Rect Generator')def generate():left = random.randint(0, 400)top = random.randint(0, 400)width = random.randint(0, 200)height = random.randint(0, 200)color = (random.randint(0, 255), random.randint(0, 255),random.randint(0, 255))surf = pygame.Surface((width, height))surf.fill(color)SCREEN.blit(surf, (left, top))while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# SCREEN.fill((0, 0, 0))generate()pygame.display.update()

代码运行截图:

代码运行截图

结语

以上,就是本章的内容。下一章,我们将会学习在 Pygame 中绘制图形。


http://chatgpt.dhexx.cn/article/UeSZiokr.shtml

相关文章

Pygame教程系列二:MoviePy视频播放篇

【前言】 在pygame 2.0.0版本之前,播放视频可以使用pygame.movie.Movie(xxxx.mpg)播放(只支持.mpg格式的视频),但是在pygame 2.0.0之后,作者因为觉得视频模块维护成本太高就给抛弃了,假如你使用pygame 2.0.0,还调用上述…

Pygame 教程(4):图像传输和绘制文本

本章,你将学会如何传输图像和绘制文本。 导航 上一章:绘制图形 下一章:监测游戏时间 文章目录 导航加载图像导出图像绘制文本实例:画板添加常量限制坐标定义属性绘制色板更改线条粗细处理鼠标事件处理键盘事件调用事件处理方法完…

Pygame基础教程(一)

写在前面的话: 本系列教程仅有一些在本机调试通过的代码(如代码中发现bug,恳请包涵)。除代码中出现的一些主要注释外,不会出现太多其他文字解释,但是,文章中会给出主要模块的官方文档地址。再次…

Pygame 教程(5):监测游戏时间

本章,你将学习如何监测游戏时间。 导航 上一章:图像传输和绘制文本 下一章:努力更新中…… 文章目录 导航监测时间游戏帧速率实例:绘图性能对比结语 监测时间 在游戏程序中,时常需要随着时间的流逝而做出不同的动作…

Pygame教程系列四:播放音频篇

【前言】 pygame播放音频文件这部分相对来说比较简单,主要是用到pygame.mixer模块,不过也有一些地方需要注意的,咱们直接先看看案例 1、案例效果图 2、案例代码 import pygame from mutagen.mp3 import MP3 # 标识是否退出循环 exitFlag Fa…

python3.8安装pygame_Python3.8安装Pygame教程

注:因为最近想用一下Python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上,安装Pygame,下面是安装的步骤,希望能够帮到大家。 第一步…

Pygame 教程(3):绘制图形

本章,你将学习如何在 Pygame 中绘制图形。 导航 上一章:重要的概念及对象 下一章:图像传输和绘制文本 文章目录 导航抗锯齿draw 模块实例:跟随鼠标的图形创建初始窗口添加变量捕捉鼠标事件绘制图形完整代码 结语 抗锯齿 抗锯齿…

Mac Pycharm导入Pygame教程(超细)

首先先新建一个想要使用Pygame的项目 进入项目后,点击文件(File)——新项目设置(settings) 点击新项目的偏好设置(Preferences for new project ) 随后可以看到 点击Python 编译器&#xff0…

mac python3.8上怎么安装pygame 第三方库_Python3.8安装Pygame教程步骤详解

注:因为最近想用一下python做一些简单小游戏的开发作为项目练手之用,而Pygame模块里面提供了大量的有用的方法和属性。今天我们就在之前安装过PyCharm的基础上,安装Pygame,下面是安装的步骤,希望能够帮到大家。 第一步 安装Python和pip 如果已安装,使用python --version …

Pygame教程系列一:快速入门篇

【简介】 Pygame 是python用来开发视频游戏的游戏引擎,底层主要是SDL库实现,算是目前利用python开发小游戏的一个性能比较高的一个游戏框架 一、安装pygame 使用pip下载安装 pip install pygame二、入门案例详析 1、示例效果 2、示例代码 import os …

pygame教程3

目录 做个小游戏精灵类精灵类介绍使用精灵类 做个小游戏 这个小游戏使用了pygame教程2的知识。 #↓初始化 import pygame,sys from pygame.locals import * pygame.init()#初始化pygame。 screen pygame.display.set_mode((800,600)) pygame.display.set_caption("Hell…

pygame教程2

目录 响应键盘上的事件让画面动起来了解x轴和y轴画圆形圆形动起来 响应键盘上的事件 import pygame#导入pygame。 import sys#导入sys from pygame.locals import *#导入pygame所有的常量,方便以后使用。 pygame.init()#初始化pygame。 screen pygame.display.set…

pygame教程笔记

pygame教程 安装pygameGame Development 1-1: Getting Started with PygameGame Development 1-2: Working with SpritesGame Development 1-3: More About SpritesPygame Shmup Part 1: Player Sprite and ControlsPygame Shmup Part 2: Enemy SpritesPygame Shmup Part 3: Co…

pygame基础教程

pygame简介 pygame可以实现python游戏的一个基础包。 pygame实现窗口 初始化pygame,init()类似于java类的初始化方法,用于pygame初始化。 pygame.init() 设置屏幕,(500,400)设置屏幕初始大小为500 * 400的大小, 0和32 是比较高…

Python pygame(GUI编程)模块最完整教程(1)

提示:下滑文章左侧可以查看目录!本教程分为多篇,总目录如下。 总目录: README.md Python-ZZY/Python-Pygame最完整教程 - Gitee.com 1 初识pygame 1.1 简介 pygame是python中一个流行的GUI编程模块,是专门为了开发游…

Pygame教程(非常详细)

文章目录 教程特点阅读条件 Pygame是什么扩展知识 Pygame下载和安装1) pip包管理器安装2) 二进制安装包安装 第一个Pygame程序初始化程序创建Surface对象事件监听游戏循环 Pygame Display显示模块详解Pygame Surface创建图像Pygame Transform图像变形Pygame Time时间控制详解1)…

GeoWave0.9.8开发人员指南

GeoWave0.9.8开发人员指南 官方英文地址:http://s3.amazonaws.com/geowave/0.9.8/docs/devguide.html 介绍 什么是GeoWave GeoWave是一个开源库,用于在排序的键值数据存储和流行的大数据框架之上存储,索引和搜索多维数据。GeoWave包含特定的…

行人检测之DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变…

Xuxiang Qi--Deep Learning based Semantic Labelling of 3D Point Cloud in Visual SLAM

元学习论文总结||小样本学习论文总结 2017-2019年计算机视觉顶会文章收录 AAAI2017-2019 CVPR2017-2019 ECCV2018 ICCV2017-2019 ICLR2017-2019 NIPS2017-2019 提出了一种建立三维密集语义地图的方法,采用GPU,ROS消息通信无法支持。 摘要 三维(3D)点云…

古老的DPM

基于可识别训练的部件模型的目标检测 Object Detection with Discriminatively Trained Part Based Models 摘要 基于多尺度可变形的部件模型我们来描述一个目标检测系统。我们的系统能够表示高度可变的对象类并在PASCAL目标检测挑战达到最先进的结果。虽然可变形部件模型变得…