Python游戏工具包---Pygame最常用的15个模块详解(附pdf版本)(1)

本文详细介绍了Pygame中的display模块,包括修改窗口标题、图标、gamma值、显示模式等功能,并提供了draw模块的图形绘制教程,如矩形、多边形、线条等。此外,还涉及了事件处理、字体加载与播放音频等内容,帮助读者掌握Pygame游戏开发的基础技能。

这些 OPENGL 标志是:

GL_ALPHA_SIZE, GL_DEPTH_SIZE, GL_STENCIL_SIZE, GL_ACCUM_RED_SIZE, GL_ACCUM_GREEN_SIZE,  GL_ACCUM_BLUE_SIZE, GL_ACCUM_ALPHA_SIZE, GL_MULTISAMPLEBUFFERS, GL_MULTISAMPLESAMPLES, GL_STEREO

**pygame.display.get_active()**当前显示界面显示在屏幕上时返回 True。

get_active() -> bool

pygame.display.set_mode() 函数被调用之后,Surface 对象将被显示在屏幕上。大多数窗口都支持隐藏,如果显示的 Surface  对象被隐藏和最小化,那么该函数将返回 False。

**pygame.display.iconify()**最小化显示的 Surface  对象。

iconify() -> bool

将显示的Surface 对象最小化或隐藏。并不是所有的操作系统都支持最小化显示界面。如果该函数调用成功,返回 True。

当显示界面最小化时,pygame.display.get_active() 返回 False。事件队列将接收到 ACTIVEEVENT 事件。

pygame.display.toggle_fullscreen() 切换全屏模式和窗口模式。

toggle_fullscreen() -> bool

切换全屏模式和窗口模式。这个函数只在 unix x11 显示驱动下工作。在大多数情况下,建议调用 pygame.display.set_mode() 创建一个新的显示模式进行切换。

**pygame.display.set_gamma()**修改硬件显示的 gama 坡道。

set_gamma(red, green=None, blue=None) -> bool

设置硬件驱动显示的红色、绿色和蓝色伽马值。如果没有传递 green 和 blue 参数,它们将与 red 值相等。不是所有的操作系统和硬件都支持伽马坡道。如果函数修改成功,则返回 True。

伽马值为 1.0 创建一个线性颜色表,较低的值会使屏幕变暗,较高的值会使屏幕变量。

**pygame.display.set_gamma_ramp()**自定义修改硬件显示的 gama 坡道

set_gamma_ramp(red, green, blue) -> bool

使用自定义表设置硬件驱动显示的红色、绿色和蓝色伽马坡道。每个参数必须是 256 位整数的列表。每位整数应该在 0 和 0xffff 之间。不是所有的操作系统和硬件都支持伽马坡道。如果函数修改成功,则返回 True。

**pygame.display.set_icon()**修改显示窗口的图标。

set_icon(Surface) -> None

设置显示窗口执行时的图标。所有的操作系统默认都是以简单的 Pygame LOGO 作为图标。

你可以传入任何 Surface  对象作为图标,但大多数操作系统要求图标的大小是 32 * 32。图标可以设置 colorkey 透明度。

一些操作系统不允许修改显示中的窗口图标。对于这类操作系统,该函数需要再调用 pygame.display.set_mode() 前先创建并设置图标。

**pygame.display.set_caption()**设置当前窗口的标题栏。

set_caption(title, icontitle=None) -> None

如果显示窗口拥有一个标题栏,这个函数将修改窗口标题栏的文本。一些操作系统支持最小化窗口时切换标题栏,通过设置 icontitle 参数实现。

**pygame.display.get_caption()**获取当前窗口的标题栏。

get_caption() -> (title, icontitle)

返回当前窗口的标题栏和最小化标题栏,通常这两个值是一样的。

**pygame.display.set_palette()**设置显示界面的调色板。

set_palette(palette=None) -> None

这个函数将修改显示界面的 8 位调色板。这不会改变Surface 对象实际的调色板,仅用于 Surface 对象的显示。如果没有传入参数,将恢复系统默认调色板。调色板是一组 RGB 三元组序列。

3.draw 模块

=========

pygame.draw Pygame 中绘制图形的模块。

函数

  • pygame.draw.rect()  —  绘制矩形

  • pygame.draw.polygon()  —  绘制多边形

  • pygame.draw.circle()  —  根据圆心和半径绘制圆形

  • pygame.draw.ellipse()  —  根据限定矩形绘制一个椭圆形

  • pygame.draw.arc()  —  绘制弧线

  • pygame.draw.line()  —  绘制线段

  • pygame.draw.lines()  —  绘制多条连续的线段

  • pygame.draw.aaline()  —  绘制抗锯齿的线段

  • pygame.draw.aalines()  —  绘制多条连续的线段(抗锯齿)

该模块用于在 Surface 对象上绘制一些简单的形状。这些函数将渲染到任何格式的 Surface 对象上。硬件渲染会比普通的软件渲染更耗时。

大部分函数用 width 参数指定图形边框的大小,如果 width = 0 则表示填充整个图形。

所有的绘图函数仅能在 Surface 对象的剪切区域生效。这些函数返回一个 Rect,表示包含实际绘制图形的矩形区域。

大部分函数都有一个 color 参数,传入一个表示 RGB 颜色值的三元组,当然也支持 RGBA 四元组。其中的 A 是 Alpha 的意思,用于控制透明度。不过该模块的函数并不会绘制透明度,而是直接传入到对应 Surface  对象的 pixel alphas 中。color 参数也可以是已经映射到 Surface  对象的像素格式中的整型像素值。

当这些函数在绘制时,必须暂时锁定 Surface  对象。许多连续绘制的函数可以通过一次性锁定直到画完再解锁来提高效率。

**函数详解****pygame.draw.rect()**绘制矩形。

rect(Surface, color, Rect, width=0) -> Rect

在 Surface  对象上绘制一个矩形。Rect 参数指定矩形的位置和尺寸。width 参数指定边框的宽度,如果设置为 0 则表示填充该矩形。

**pygame.draw.polygon()**绘制多边形。

polygon(Surface, color, pointlist, width=0) -> Rect 在 Surface  对象上绘制一个多边形。pointlist 参数指定多边形的各个顶点。width 参数指定边框的宽度,如果设置为 0 则表示填充该矩形。

绘制一个抗锯齿的多边形,只需要将 aalines() 的 closed 参数设置为 True 即可。

**pygame.draw.circle()**根据圆心和半径绘制圆形。

circle(Surface, color, pos, radius, width=0) -> Rect

在 Surface  对象上绘制一个圆形。pos 参数指定圆心的位置,radius 参数指定圆的半径。width 参数指定边框的宽度,如果设置为 0 则表示填充该矩形。

**pygame.draw.ellipse()**根据限定矩形绘制一个椭圆形。

ellipse(Surface, color, Rect, width=0) -> Rect

在 Surface  对象上绘制一个椭圆形。Rect 参数指定椭圆外围的限定矩形。width 参数指定边框的宽度,如果设置为 0 则表示填充该矩形。

**pygame.draw.arc()**绘制弧线。

arc(Surface, color, Rect, start_angle, stop_angle, width=1) -> Rect

在 Surface  对象上绘制一条弧线。Rect 参数指定弧线所在的椭圆外围的限定矩形。两个 angle 参数指定弧线的开始和结束位置。width 参数指定边框的宽度。

**pygame.draw.line()**绘制线段。

line(Surface, color, start_pos, end_pos, width=1) -> Rect

在 Surface  对象上绘制一条线段。两端以方形结束。

**pygame.draw.lines()**绘制多条连续的线段。

lines(Surface, color, closed, pointlist, width=1) -> Rect

在 Surface  对象上绘制一系列连续的线段。pointlist 参数是一系列短点。如果 closed 参数设置为 True,则绘制首尾相连。

**pygame.draw.aaline()**绘制抗锯齿的线段。

aaline(Surface, color, startpos, endpos, blend=1) -> Rect

在 Surface  对象上绘制一条抗锯齿的线段。blend 参数指定是否通过绘制混合背景的阴影来实现抗锯齿功能。该函数的结束位置允许使用浮点数。

**pygame.draw.aalines()**绘制多条连续的线段(抗锯齿)。

aalines(Surface, color, closed, pointlist, blend=1) -> Rect

在 Surface  对象上绘制一系列连续的线段(抗锯齿)。如果 closed 参数为 True,则首尾相连。blend 参数指定是否通过绘制混合背景的阴影来实现抗锯齿功能。该函数的结束位置允许使用浮点数。

image

# 公众号:一行数据

import pygame

import sys

import math

from pygame.locals import *

pygame.init()

WHITE = (255, 255, 255)

BLACK = (0, 0, 0)

GREEN = (0, 255, 0)

RED = (255, 0, 0)

BLUE = (0, 0, 255)

points = [(200, 175), (300, 125), (400, 175), (450, 125), (450, 225), (400, 175), (300, 225)]

size = width, height = 640, 1000

screen = pygame.display.set_mode(size)

pygame.display.set_caption(“Python Demo”)

clock = pygame.time.Clock()

while True:

for event in pygame.event.get():

if event.type == QUIT:

sys.exit()

screen.fill(WHITE)

pygame.draw.rect(screen, BLACK, (50, 30, 150, 50), 0)

pygame.draw.rect(screen, BLACK, (250, 30, 150, 50), 1)

pygame.draw.rect(screen, BLACK, (450, 30, 150, 50), 10)

pygame.draw.polygon(screen, GREEN, points, 0)

pygame.draw.circle(screen, RED, (320, 400), 25, 1)

pygame.draw.circle(screen, GREEN, (320, 400), 75, 1)

pygame.draw.circle(screen, BLUE, (320, 400), 125, 1)

pygame.draw.ellipse(screen, BLACK, (100, 600, 440, 100), 1)

pygame.draw.ellipse(screen, BLACK, (220, 550, 200, 200), 1)

pygame.draw.arc(screen, BLACK, (100, 800, 440, 100), 0, math.pi, 1)

pygame.draw.arc(screen, BLACK, (220, 750, 200, 200), math.pi, math.pi * 2, 1)

pygame.display.flip()

clock.tick(10)

4.event模块

=========

pygame.event用于处理事件与事件队列的 Pygame 模块。

函数

  • pygame.event.pump()  —  让 Pygame 内部自动处理事件

  • pygame.event.get()  —  从队列中获取事件

  • pygame.event.poll()  —  从队列中获取一个事件

  • pygame.event.wait()  —  等待并从队列中获取一个事件

  • pygame.event.peek()  —  检测某类型事件是否在队列中

  • pygame.event.clear()  —  从队列中删除所有的事件

  • pygame.event.event_name()  —  通过 id 获得该事件的字符串名字

  • pygame.event.set_blocked()  —  控制哪些事件禁止进入队列

  • pygame.event.set_allowed()  —  控制哪些事件允许进入队列

  • pygame.event.get_blocked()  —  检测某一类型的事件是否被禁止进入队列

  • pygame.event.set_grab()  —  控制输入设备与其他应用程序的共享

  • pygame.event.get_grab()  —  检测程序是否共享输入设备

  • pygame.event.post()  —  放置一个新的事件到队列中

  • pygame.event.Event()  —  创建一个新的事件对象

  • pygame.event.EventType  —  代表 SDL 事件的 Pygame 对象 Pygame 通过事件队列控制所有的时间消息。该模块中的程序将帮你管理事件队列。输入队列很大程度依赖于 pygame 的 display 模块。如果 display 没有被初始化,显示模式没有被设置,那么事件队列就还没有开始真正工作。

常规的队列是由 pygame.event.EventType 定义的事件对象的组成,有多种方法来访问里边的事件对象:从简单的检测事件是否存在,到直接从栈中获取它们。

所有事件都有一个类型标识符,这个标识符对应的值定义在 NOEVENT 到 NUMEVENTS 之间(温馨提示:类似于 C 语言的宏定义,明白?)。用户可以自行定义事件,但类型标识符的值应该高于或等于 USEREVENT。

获取各种输入设备的状态,推荐你直接通过它们相应的模块(mouse,key 和 joystick)提供的函数访问,而不是通过事件队列;如果你使用此函数,请记住,Pygame 需要通过一些方式与系统的窗口管理器

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值