Bootstrap

深入探索pygame游戏开发库

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:pygame是一个用于Python语言的流行游戏开发库,支持从2D到3D游戏的开发。版本"pygame-2.1.1.dev2.tar.gz"是该库的开发版2。本压缩包包含pygame库的源代码、文档、示例等。用户可以通过pip安装pygame,进行游戏开发时,可以运用其窗口和表面管理、事件处理、图像处理、声音播放、动画制作、物理模拟、精灵和组管理、字体和文本渲染等核心功能。合理管理资源对于游戏开发至关重要。 pygame-2.1.1.dev2.tar.gz

1. pygame库介绍与版本说明

pygame库概述

pygame 是一个开源的Python库,它广泛用于创建游戏和多媒体应用程序。它封装了许多处理图像、声音、事件和图形显示等的复杂操作,使得开发游戏变得简单而有趣。 pygame 的灵活性和易用性使其成为初学者和专业开发者的首选。

pygame的版本历史

自2000年首次发布以来, pygame 库经历了多个版本的迭代和发展。每个版本都引入了新的特性、改进和修复。了解 pygame 的版本历史不仅有助于理解库的演变,还有助于利用新特性来开发更高效的程序。例如, pygame 2.0 对窗口管理和音频支持方面进行了重大改进。

版本选择建议

对于想要开始使用 pygame 的开发者,建议从最新稳定版本开始,这样可以享受到最新的功能和性能改进。对于已经熟悉 pygame 的开发者,可以根据项目需求,选择最适合当前项目的版本。在开始新项目时,始终检查官方文档以获取最新版本信息和最佳实践指南。

pygame 版本的持续更新和优化,确保了它能够跟上现代游戏开发的需求,无论是简单的2D游戏还是具有复杂特性的应用,都可以通过这个库来实现。接下来的章节将详细介绍如何安装 pygame 以及如何开始你的第一个游戏项目。

2. pygame库的安装与导入

2.1 安装pygame库的多种方法

2.1.1 使用pip安装

pip 是 Python 的包管理工具,大多数情况下,使用它来安装 Python 库是最直接且常用的方法。对于安装 pygame ,只需在命令行执行如下指令即可:

pip install pygame

这条命令会将 pygame 库及其依赖下载并安装到您的 Python 环境中。请确保您的系统已安装了最新版本的 Python 和 pip

2.1.2 源码安装pygame

如果您希望安装 pygame 的最新版本,可能尚未发布到 Python 的包索引 PyPI 中,可以通过源码安装。首先,您需要从 pygame 的官方 GitHub 仓库(https://github.com/pygame/pygame)下载源码。下载后,可以使用以下命令进行安装:

python setup.py install

从源码安装不仅可以获取最新版本的 pygame ,还可以在某些情况下解决通过 pip 安装时遇到的兼容性问题。

2.1.3 使用虚拟环境安装

虚拟环境是 Python 开发中的一个重要实践,它允许您在隔离的空间中安装和管理库,这有助于避免版本冲突。要使用虚拟环境安装 pygame ,您首先需要安装虚拟环境管理工具 virtualenv 。以下是创建和使用虚拟环境的步骤:

  1. 安装 virtualenv:
pip install virtualenv
  1. 创建虚拟环境:
virtualenv myenv
  1. 激活虚拟环境:

  2. 在 Windows 上:

myenv\Scripts\activate
  • 在 macOS/Linux 上:
source myenv/bin/activate
  1. 在虚拟环境中安装 pygame
pip install pygame
  1. 使用 pygame 开发应用。

  2. 当开发完成,您可以通过执行以下命令来退出虚拟环境:

deactivate

2.2 导入pygame库及模块

2.2.1 常用模块导入方法

导入 pygame 库中的模块是使用 pygame 进行游戏开发的第一步。通常,基本的游戏开发涉及以下几个模块: pygame.display (管理显示窗口), pygame.event (处理事件), pygame.mouse (鼠标控制), pygame.key (键盘控制)等。

以下是一个导入常用模块的示例代码:

import pygame
from pygame.locals import *

# 初始化pygame
pygame.init()

# 创建显示窗口
screen = pygame.display.set_mode((800, 600))

# 主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False

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

# 退出pygame
pygame.quit()

2.2.2 模块导入错误处理

在导入模块时,可能会遇到 ImportError ,这通常是因为库没有正确安装或者路径设置不正确所导致。以下是一些常见的导入错误处理方法:

try:
    import pygame
except ImportError as e:
    print(f"无法导入pygame库:{e}")
    # 建议的操作可能包括:检查Python环境,确认pygame是否已安装或安装正确。

在导入模块后,如果存在特定的模块没有找到的情况,您可以针对这些模块进行单独导入,如下示例:

try:
    from pygame.locals importQUIT
except ImportError as e:
    print(f"无法从pygame中导入QUIT:{e}")
    # 可以通过定义 QUIT = pygame.QUIT 来解决这个问题
    from pygame import QUIT

通过以上模块导入和错误处理,您可以确保 pygame 环境的稳定性,并且可以快速定位并解决潜在的问题。

3. ```

第三章:pygame窗口和表面操作

3.1 创建与管理游戏窗口

游戏窗口是游戏显示内容和与用户交互的界面。在pygame中,游戏窗口的创建与管理是基础但极为关键的一步。

3.1.1 窗口的创建与设置

使用pygame创建游戏窗口非常直观。 pygame.display.set_mode() 函数是创建游戏窗口的核心。它接受一个元组,指定了窗口的宽度和高度。

import pygame

# 初始化pygame
pygame.init()

# 设置窗口大小
size = width, height = 640, 480
screen = pygame.display.set_mode(size)

参数说明: - size :一个表示窗口宽度和高度的元组,以像素为单位。 - screen :返回的Surface对象,用于之后绘制各种图形和图像。

逻辑分析: 在上述代码中,我们首先初始化pygame。然后,通过 set_mode() 函数创建了一个640x480像素大小的窗口。 set_mode() 函数返回一个Surface对象,之后的游戏绘图操作都需要在这个Surface上进行。

创建窗口后,我们可以使用 pygame.display.set_caption() 函数设置窗口的标题。

pygame.display.set_caption("My Game")

为了窗口更加生动,通常还需要设置窗口的图标。

icon = pygame.image.load('icon.png')
pygame.display.set_icon(icon)

3.1.2 窗口的事件循环管理

窗口创建后,必须进行事件处理,以响应用户的输入和系统事件。在pygame中, pygame.event.get() 用于获取并处理事件队列中的事件。

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

逻辑分析: 在上面的代码片段中,我们创建了一个while循环,这个循环在游戏运行期间会不断重复。在循环内部, pygame.event.get() 调用返回一个新的事件列表,之后通过检查每个事件的类型,我们可以响应特定的事件,例如当用户点击关闭按钮时,设置 running 标志为False,退出循环。

在事件处理中,还可以对其他事件进行响应,例如按键事件、鼠标移动事件等。

3.2 表面操作基础

游戏窗口内的所有绘图操作实际上都是在Surface对象上进行的。Surface可以看作是一个图像的缓冲区,所有在pygame中的图形绘制和图像显示,实际上都是在相应的Surface上进行绘制和显示。

3.2.1 表面的创建与绘制

除了主游戏窗口,还可以创建新的Surface用于临时的绘图操作。

# 创建一个新Surface对象
buffer = pygame.Surface((200, 100))
buffer.fill((255, 255, 255))  # 使用白色填充

逻辑分析: 这里我们创建了一个200x100像素的白色Surface。 fill() 方法用于填充Surface的颜色。这种在缓冲区Surface上绘图后再更新到主窗口的操作,可以减少屏幕闪烁,优化游戏的视觉效果。

3.2.2 表面的更新与刷新

绘制完成的Surface需要更新到主窗口上显示出来。这通常通过 pygame.display.update() 方法实现。

# 更新整个屏幕
pygame.display.update()

如果只想更新窗口的一部分,可以指定一个区域:

# 更新窗口左上角100x100像素的区域
pygame.display.update((0, 0, 100, 100))

逻辑分析: update() 方法可以用来刷新一个或多个区域的显示内容。当绘制在一个Surface上完成后,使用 update() 方法将更改显示到屏幕上。如果不调用 update() ,窗口的显示内容是不会自动更新的。在实际游戏中,这个方法应该在所有绘制操作完成后调用,以确保所有的更改都显示在屏幕上。

4. pygame事件处理机制

4.1pygame中的事件类型

4.1.1 事件循环与事件队列

在任何图形用户界面(GUI)或游戏开发库中,事件处理都是核心概念之一。在Pygame中,事件系统是通过事件循环和事件队列来实现的。Pygame事件循环负责监听事件,并将它们放入事件队列中。应用程序则从事件队列中取出事件,并根据事件类型做出响应。

事件循环是一个持续运行的循环,它检查系统中的新事件,比如鼠标点击、按键按下、窗口尺寸改变等,并将这些事件添加到队列中。事件队列是事件的一个先进先出(FIFO)列表,程序通过调用Pygame的 pygame.event.get() 方法来从队列中获取事件。

要理解事件循环和队列的工作原理,先来看看如何启动Pygame应用的事件循环:

import pygame

# 初始化pygame
pygame.init()

# 创建窗口
window = pygame.display.set_mode((800, 600))

# 事件循环开始
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # 其他事件处理
    # 渲染更新
    pygame.display.flip()

# 退出游戏
pygame.quit()

在上面的代码中, while running: 构成了一个事件循环。在循环中, pygame.event.get() 方法检索队列中的所有事件,并将它们逐一处理。如果遇到类型为 pygame.QUIT 的事件,则将 running 变量设置为 False ,从而退出循环并结束程序。

事件队列是Pygame设计的核心部分,它允许程序异步处理各种用户输入和系统事件,从而保持界面的响应性。了解事件队列的工作机制,对于编写流畅和用户友好的应用程序至关重要。

4.1.2 常见事件处理方法

Pygame中有一些基本的事件类型,它们在游戏开发中经常使用。例如, QUIT 事件让程序知道用户已经请求退出程序。 KEYDOWN KEYUP 事件用于响应键盘按键的按下和释放,而 MOUSEBUTTONDOWN MOUSEBUTTONUP 事件则用于处理鼠标事件。

处理事件的一个好方法是使用事件的 type 属性来判断事件类型。以下是处理常见键盘和鼠标事件的一个简单示例:

import pygame

# 初始化pygame
pygame.init()

# 创建窗口
window = pygame.display.set_mode((800, 600))

# 事件循环开始
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            # 获取鼠标位置和按钮信息
            pos = pygame.mouse.get_pos()
            print(f'Mouse button clicked at: {pos}')

    # 渲染更新
    pygame.display.flip()

# 退出游戏
pygame.quit()

在这个示例中,我们不仅检查了 QUIT 事件,还检查了 KEYDOWN 事件,如果用户按下 ESC 键,则退出游戏。同时,我们也处理了 MOUSEBUTTONDOWN 事件来获取并打印鼠标点击的位置。

处理这些事件对于游戏和应用程序响应用户交互至关重要。在实际的游戏开发中,可能还需要处理其他更复杂的事件,如游戏控制器输入、窗口状态变化等。Pygame事件系统通过提供一个灵活的方式来处理这些事件,使得开发者可以创建出响应迅速、功能丰富的游戏和应用程序。

4.2 自定义事件与回调函数

4.2.1 创建与监听自定义事件

Pygame允许开发者自定义事件类型,为游戏或应用添加更多的交互性。自定义事件可以用来触发特殊的程序逻辑,比如游戏中的特殊事件、状态变化、定时器触发等。

要创建一个自定义事件,可以使用 pygame.event.Event() 方法,并为它指定一个唯一的事件类型,这个类型可以通过定义一个新的常量来实现。然后,可以在事件循环中监听这些自定义事件,并作出响应。

下面是一个创建和监听自定义事件的简单例子:

import pygame

# 初始化pygame
pygame.init()

# 定义一个新的事件类型
CUSTOM_EVENT = pygame.USEREVENT + 1

# 创建窗口
window = pygame.display.set_mode((800, 600))

# 发送自定义事件
pygame.time.set_timer(CUSTOM_EVENT, 3000)  # 每3秒发送一次事件

# 事件循环开始
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == CUSTOM_EVENT:
            print("Received a custom event!")
    # 渲染更新
    pygame.display.flip()

# 退出游戏
pygame.quit()

在这个例子中,我们定义了一个新的事件类型 CUSTOM_EVENT ,并使用 pygame.time.set_timer() 方法设置了一个定时器,每隔3秒向事件队列中发送一个 CUSTOM_EVENT 事件。在事件循环中,我们检查了 CUSTOM_EVENT ,当它发生时,打印出一条消息。

这种方法非常有效,可以用来创建游戏中的各种自定义逻辑,比如游戏关卡时间限制、事件触发机制等。自定义事件是Pygame中一个强大的特性,为游戏设计提供了更大的灵活性。

4.2.2 回调函数的设计与实现

回调函数是一种函数,它被作为参数传递给另一个函数,并在适当的时候由后者调用。在Pygame中,回调函数通常被用于自定义事件处理和更新游戏状态。

要设计一个回调函数,你需要定义一个函数,并在需要的地方调用它。回调函数可以在多种事件中被触发,如窗口尺寸变化、按键事件、定时器事件等。通过实现回调函数,开发者可以将特定的逻辑封装起来,并在事件发生时执行。

下面是一个使用回调函数处理事件的示例:

import pygame

def custom_callback():
    print("Custom callback function called.")

# 初始化pygame
pygame.init()

# 创建窗口
window = pygame.display.set_mode((800, 600))

# 设置一个定时器,在每2000毫秒触发一个自定义事件
pygame.time.set_timer(pygame.USEREVENT + 1, 2000, callback=custom_callback)

# 事件循环开始
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.USEREVENT + 1:
            print("Received a user event.")
            custom_callback()  # 调用回调函数

    # 渲染更新
    pygame.display.flip()

# 退出游戏
pygame.quit()

在这个例子中,我们定义了一个名为 custom_callback 的回调函数,该函数在控制台上打印一条消息。我们设置了一个定时器,每隔2秒触发一个 USEREVENT + 1 事件,并将 custom_callback 作为回调函数传递给 set_timer 方法。在事件循环中,每当 USEREVENT + 1 事件发生时,我们不仅打印出一条消息,还调用了 custom_callback 函数。

回调函数为事件处理提供了一种灵活而强大的方式,使得代码更加模块化,易于维护和扩展。在大型游戏项目中,使用回调函数可以有效地组织代码结构,并提高代码的复用性。

5. pygame图像和图形支持

5.1 图像的加载与显示

5.1.1 图像文件的读取与处理

在游戏开发中,加载和处理图像是一项基础而又重要的任务。Pygame 库通过其 pygame.image 模块为开发者提供了一系列图像处理功能,让图像文件的加载和显示变得简单高效。

首先,要使用 Pygame 加载图像文件,通常使用 pygame.image.load() 函数,它返回一个 Surface 对象,该对象包含了图像的像素数据。例如:

import pygame

# 初始化 Pygame
pygame.init()

# 加载图像文件
image = pygame.image.load('example.png')

# 将图像转换为适合游戏窗口显示的格式
image = image.convert()

# 获取 Surface 的尺寸
size = image.get_rect().size
print(size)  # 输出图像的宽度和高度

在这段代码中, load 函数读取位于程序当前工作目录下名为 example.png 的图像文件。通过调用 convert() 方法可以将图像转换为一个适合显示的格式,保证其可以在 Pygame 窗口中显示。

5.1.2 图像在游戏中的显示与管理

一旦图像被加载并转换,接下来就要考虑如何在游戏中显示这些图像。这通常涉及将图像绘制到游戏窗口的主 Surface 上,通常是通过 blit 方法来完成的。 blit 方法会在指定的 Surface 上绘制一个源 Surface(本例中为加载的图像)。

# 创建游戏窗口
screen = pygame.display.set_mode(size)

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 清屏
    screen.fill((0, 0, 0))

    # 将图像绘制到游戏窗口
    screen.blit(image, (100, 100))  # 在屏幕上指定位置绘制图像

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

    # 控制游戏帧率
    pygame.time.Clock().tick(60)

# 退出 Pygame
pygame.quit()

在这段代码中,游戏主循环负责处理事件和更新游戏窗口。 blit 方法用于绘制图像,其中 (100, 100) 表示图像在窗口中的起始坐标位置。最后, pygame.display.flip() 用于更新整个显示窗口的内容。

图像管理不仅限于显示,还包括对图像进行缩放、旋转、裁剪等操作,以适应游戏场景中的不同需求。Pygame 提供了 pygame.transform 模块,帮助开发者实现这些图像处理功能。

import pygame.transform

# 缩放图像
resized_image = pygame.transform.scale(image, (400, 300))

# 旋转图像
rotated_image = pygame.transform.rotate(image, 90)

# 裁剪图像
clipped_image = image.subsurface(pygame.Rect(10, 10, 50, 50))

在这段代码中, scale() 函数按照给定的尺寸缩放图像, rotate() 函数旋转图像指定的度数, subsurface() 函数则通过指定一个矩形区域来裁剪图像的一部分。

5.2 图形绘制技术

5.2.1 绘制基本图形

Pygame 提供了一组强大的函数用于绘制基本的几何图形,如矩形、圆形和椭圆等。这些函数在 pygame.draw 模块中定义,它们可以绘制填充或轮廓图形。

# 绘制一个填充的矩形
pygame.draw.rect(screen, (255, 0, 0), (10, 10, 200, 100), 0)

# 绘制一个红色边框的圆形
pygame.draw.circle(screen, (0, 0, 255), (350, 50), 20, 1)

第一个函数 draw.rect 用于绘制一个矩形,参数分别为:要绘制的 Surface 对象、颜色、矩形位置和尺寸、边框宽度。第二个函数 draw.circle 用于绘制一个圆形,参数包括 Surface 对象、颜色、圆心坐标、半径以及边框宽度。

5.2.2 高级图形绘制技巧

Pygame 还支持更高级的图形绘制技巧,如使用贝塞尔曲线(Bézier curves)或反锯齿(antialiasing)来增强图形的平滑性和美观度。

# 绘制一条贝塞尔曲线
points = [(10, 10), (300, 300), (200, 400), (400, 100)]
pygame.draw.bezier_curve(screen, (0, 255, 0), points, 2)

# 绘制一个带反锯齿的矩形
pygame.draw.aapolygon(screen, (255, 255, 255), [(10, 10), (20, 20), (10, 30), (0, 20)], 1)

draw.bezier_curve 函数绘制了一条贝塞尔曲线,参数包括 Surface 对象、颜色、控制点序列和曲线宽度。而 draw.aapolygon 函数绘制了一个带反锯齿的多边形,参数有 Surface 对象、颜色、点的坐标列表和线宽。

通过这些绘制方法,开发者可以在 Pygame 游戏中实现各种视觉效果,使得游戏的图形界面更加丰富多彩。

6. pygame动画和帧率控制

6.1 动画实现方法

动画是游戏吸引玩家的关键因素之一。通过在游戏窗口中连续显示一系列图像,我们可以创建动态效果。在pygame中,动画可以通过多种方法实现,包括使用 pygame.image.load() 加载一系列图像帧,并在游戏循环中逐帧显示它们。

6.1.1 简单动画的创建与控制

对于简单的动画,比如一个小球左右移动,我们可以利用 pygame.image.load() 加载小球的两个不同状态的图像,然后通过改变图像在屏幕上的位置来创建动画效果。

import pygame
import sys

# 初始化pygame
pygame.init()

# 设置游戏窗口
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Simple Animation Example")

# 加载图像资源
ball_image = pygame.image.load("ball1.png")  # 假设有两个状态的球图像ball1.png和ball2.png
ball_rect = ball_image.get_rect()

# 设置初始位置和帧率
x, y = screen_width // 2, screen_height // 2
vel = 2

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 更新小球的位置
    x += vel
    if x < 0 or x > screen_width - ball_rect.width:
        vel = -vel

    # 绘制小球到新位置
    screen.fill((255, 255, 255))  # 清屏
    screen.blit(ball_image, (x, y))
    pygame.display.flip()

    # 控制帧率
    pygame.time.Clock().tick(60)

pygame.quit()
sys.exit()

6.1.2 高级动画技术与应用

高级动画技术可能包括精灵类的使用,精灵类( pygame.sprite.Sprite )允许将图像和相关的行为捆绑在一起,使得动画更加模块化和易于管理。

import pygame
import sys

# 初始化pygame
pygame.init()

# 设置游戏窗口
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Advanced Animation with Sprites")

# 创建精灵类
class Ball(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load("ball.png")
        self.rect = self.image.get_rect()
        self.rect.center = (screen_width // 2, screen_height // 2)
        self.vel = 2
    def update(self):
        self.rect.x += self.vel
        if self.rect.left <= 0 or self.rect.right >= screen_width:
            self.vel = -self.vel

# 创建精灵和精灵组
ball = Ball()
all_sprites = pygame.sprite.Group(ball)

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 更新精灵位置
    all_sprites.update()

    # 绘制所有精灵
    screen.fill((255, 255, 255))  # 清屏
    all_sprites.draw(screen)
    pygame.display.flip()

    # 控制帧率
    pygame.time.Clock().tick(60)

pygame.quit()
sys.exit()

6.2 帧率管理与性能优化

帧率是衡量游戏性能的关键指标之一,它描述了每秒钟屏幕可以刷新多少次。一个流畅的游戏通常需要30帧每秒(FPS)以上的帧率。在pygame中, pygame.time.Clock() 对象可以帮助我们控制帧率。

6.2.1 帧率的计算与限制

使用 pygame.time.Clock() tick() 方法可以限制游戏循环的帧率。 tick() 方法接受一个参数,表示每秒最多允许多少帧。

clock = pygame.time.Clock()
while running:
    # 游戏逻辑更新...

    # 绘制图形到屏幕...
    pygame.display.flip()

    # 限制帧率为60FPS
    clock.tick(60)

6.2.2 优化游戏性能的方法

为了优化游戏性能,开发者应当确保:

  • 避免使用复杂的计算和循环 ,尤其是在游戏的主循环中。
  • 尽可能减少绘图调用次数 ,通过一次性更新整个屏幕区域而非多个小区域。
  • 合理管理内存使用 ,减少不必要的数据加载和存储。
  • 利用 blit() 方法绘制图像 ,避免使用 pygame.draw() 进行复杂的绘制,因为后者计算成本较高。

总结来说,合理的帧率控制和游戏性能优化将直接影响游戏体验。开发者需要在满足流畅性的同时,确保资源的高效使用和正确的游戏逻辑处理。在后续的章节中,我们将进一步探索如何在pygame中集成声音和音乐,以及如何实现物理模拟和碰撞检测,这些都是提升游戏沉浸感和真实感的重要组成部分。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:pygame是一个用于Python语言的流行游戏开发库,支持从2D到3D游戏的开发。版本"pygame-2.1.1.dev2.tar.gz"是该库的开发版2。本压缩包包含pygame库的源代码、文档、示例等。用户可以通过pip安装pygame,进行游戏开发时,可以运用其窗口和表面管理、事件处理、图像处理、声音播放、动画制作、物理模拟、精灵和组管理、字体和文本渲染等核心功能。合理管理资源对于游戏开发至关重要。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

;