游戏开发中的人工智能——A*路径寻找算法(二)

游戏开发中的人工智能 复习 个人复习,一些仅是给自己的复习提示(=w=) 阅读详情

1、启发式搜索

状态空间搜索:就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。由于求解问题的过程中分枝有很多,主要是求解过程中求解条件的不确定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间。问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。这个寻找的过程就是状态空间搜索。

常用的状态空间搜索有深度优先和广度优先。广度优先是从初始状态一层一层向下找,直到找到目标为止。深度优先是按照一定的顺序前查找完一个分支,再查找另一个分支,以至找到目标为止。这两种算法在数据结构书中都有描述,可以参看这些书得到更详细的解释。

前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举。这在状态空间不大的情况下是很合适的算法,可是当状态空间十分大,且不预测的情况下就不可取了。他的效率实在太低,甚至不可完成。在这里就要用到启发式搜索了。


启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置, 再从这个位置进行搜索直到目标。这样可以省略大量无畏的搜索路径,提到了效率。在启发式搜索中,对位置的估价是十分重要的。

2、启发式搜索算法

启发中的估价是用估价函数表示的,如:
f(n) = g(n) + h(n)

其中 f(n)是节点n的估价函数,g(n)实在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。

在这里主要是h(n)体现了搜索的启发信息,因为g(n)是已知的。如果说详细点,g(n)代表了搜索的广度的优先趋势。

启发式搜索其实有很多的算法,比如:局部择优搜索法、最好优先搜索法、A*等等。这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的策略不同。

局部择优搜索法:就是在搜索的过程中选取“最佳节点”后舍弃其它的兄弟节点,父亲节点,而一直得搜索下去。这种搜索的结果很明显,由于舍弃了其他的节点,可能也把最好的节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。

最好优先搜索法:在搜索时,并没有舍弃节点(除非该节点是死节点),在每一步的估价中都把当前节点和以前节点的估价值比较得到一个“最佳的节点”。这样可以有效的防止“最佳节点”的丢失。其实A*算法也是一种最好优先的算法。

由于在一些问题求解时,我们希望能够求解出状态空间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的。我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。A*算法是一个可采纳的最好优先算法。

3、A* 算法

A*算法的估价函数可表示为:f'(n) = g'(n) + h'(n)
这里,f'(n)是估价函数,g'(n)是起点到n的最短路径值,h'(n)是n到目标的最断路经的启发值。

A*算法的核心是估价函数f(n),它包括g(n)和h(n)两部分。g(n)是已经走过的代价,h(n)是n到目标的估计代价。在这个例子中g(n)表示在状态空间从起始节点到n节点的深度即所需步数,h(n)表示n节点所在地图的位置到目标位置的直线距离。

其实广度优先算法就是A*算法的特例。其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'(n),所以由前述可知广度优先算法是一种可采纳的。实际也是。当然它是一种最臭的A*算法。

h(n)启发函数的信息性:h(n) 的信息性通俗点说其实就是在估计一个节点的值时的约束条件,如果信息越多或约束条件越多则排除的节点就越多,估价函数越好或说这个算法越好。这就是为什么广度优先算法的那么臭的原因了,它的h(n)=0,一点启发信息都没有。但在游戏开发中由于实时性的问题,h(n)的信息越多,它的计算量就越大,耗费的时间就越多。就应该适当的减小h(n)的信息,即减小约束条件。但算法的准确性就差了,这里就有一个平衡的问题。

在游戏开发中的具体实现可参考博文:游戏开发中的人工智能——A*路径寻找算法

搜索过程中设置两个表:OPEN和CLOSED。OPEN表保存了所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。算法中有一步是根据估价函数重排OPEN表。这样循环中的每一步只考虑OPEN表中状态最好的节点。

A*算法流程:
首先将起始结点S放入OPEN表,CLOSE表置空,算法开始时:
1、如果OPEN表不为空,从表头取一个结点n,如果为空算法失败
2、n是目标解吗?是,找到一个解(继续寻找,或终止算法);不是到3
3、将n的所有后继结点展开,就是从n可以直接关联的结点(子结点),如果不在CLOSE表中,就将它们放入OPEN表,并把S放入CLOSE表,同时计算每一个后继结点的估价值f(n),将OPEN表按f(x)排序,最小的放在表头,重复算法到1

伪代码:

Best_First_Search()
{
	Open = [起始节点];
	Closed = [];
	while (Open表非空)
	{
		从Open中取得一个节点X,并从OPEN表中删除。
			if (X是目标节点)
			{
				求得路径PATH;
				返回路径PATH;
			}
			for (每一个X的子节点Y)
			{
				if (Y不在OPEN表和CLOSE表中)
				{
					求Y的估价值;
					并将Y插入OPEN表中;
				}
				//还没有排序
				else if (Y在OPEN表中)
				{
					if (Y的估价值小于OPEN表的估价值)
						更新OPEN表中的估价值;
				}
				else //Y在CLOSE表中
				{
					if (Y的估价值小于CLOSE表的估价值)
					{
						更新CLOSE表中的估价值;
						从CLOSE表中移出节点,并放入OPEN表中;
					}
				}
				将X节点插入CLOSE表中;
				按照估价值将OPEN表中的节点排序;
			}//end for
	}//end while
}//end func

 

4、最短路径问题,Dijkstra算法与A*

A*是求这样一个和最短路径有关的问题,那单纯的最短路径问题当然可以用A*来算,对于g(n) 就是[S,n],在搜索过程中计算,而h(n)我想不出很好的办法,对于一个抽象的图搜索,很难找到很好的h(n),因为h(n)和具体的问题有关。只好是h(n)=0,退为有序搜索。

 

当OPEN表为空时CLOSE表中将求得从V0到其它所有结点的最短路径。考虑到算法性能,外循环中每次从OPEN表取一个元素,共取了n次(共n个结点),每次展开一个结点的后续结点时,需O(n)次,同时再对OPEN表做一次排序,OPEN表大小是O(n)量级的,若用快排就是O(nlogn),乘以外循环总的复杂度是O(n^2logn),如果每次不是对OPEN表进行排序,因为总是不断地有新的结点添加进来,所以不用进行排序,而是每次从OPEN表中求一个最小的,那只需要O(n)的复杂度,所以总的复杂度为O(n*n)这相当于 Dijkstra算法。在这个算法基础之上稍加改进就是Dijkstra算法。OPEN表中常出现这样的表项:(Vk,fk1)(Vk,fk2) (Vk,fk3),而从算法上看,只有fk最小的一个才有用,于是可以将它们合并,整个OPEN表表示当前的从V0到其它各点的最短路径,定长为n,且初始时为V0可直接到达的权值(不能到达为INFINITY),于是就成了Dijkstra算法。

Dijkstra's algorithm:

这个算法是通过为每个顶点 v 保留目前为止所找到的从s到v的最短路径来工作的。初始时,原点 s 的路径长度值被赋为 0 (d[s] = 0),若存在能直接到达的边(s,m),则把d[m]设为w(s,m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大,即表示我们不知道任何通向这些顶点的路径(对于 V 中所有顶点 v 除 s 和上述 m 外 d[v] = ∞)。当算法退出时,d[v] 中存储的便是从 s 到 v 的最短路径,或者如果路径不存在的话是无穷大。 Dijkstra 算法的基础操作是边的拓展:如果存在一条从 u 到 v 的边,那么从 s 到 v 的最短路径可以通过将边(u, v)添加到尾部来拓展一条从 s 到 u 的路径。这条路径的长度是 d[u] + w(u, v)。如果这个值比目前已知的 d[v] 的值要小,我们可以用新值来替代当前 d[v] 中的值。拓展边的操作一直运行到所有的 d[v] 都代表从 s 到 v 最短路径的花费。这个算法经过组织因而当 d[u] 达到它最终的值的时候每条边(u, v)都只被拓展一次。
算法维护两个顶点集 S 和 Q。集合 S 保留了我们已知的所有 d[v] 的值已经是最短路径的值顶点,而集合 Q 则保留其他所有顶点。集合S初始状态为空,而后每一步都有一个顶点从 Q 移动到 S。这个被选择的顶点是 Q 中拥有最小的 d[u] 值的顶点。当一个顶点 u 从 Q 中转移到了 S 中,算法对每条外接边 (u, v) 进行拓展。

伪代码:

function Dijkstra(G, w, s)
     for each vertex v in V[G]                        // 初始化
           d[v] := infinity                                 // 將各點的已知最短距離先設成無窮大
           previous[v] := undefined                         // 各点的已知最短路径上的前趋都未知
     d[s] := 0                                              // 因为出发点到出发点间不需移动任何距离,所以可以直接将s到s的最小距离设为0
     S := empty set
     Q := set of all vertices
     while Q is not an empty set                      // Dijkstra演算法主體
           u := Extract_Min(Q)
           S.append(u)
           for each edge outgoing from u as (u,v)
                  if d[v] > d[u] + w(u,v)             // 拓展边(u,v)。w(u,v)为从u到v的路径长度。
                        d[v] := d[u] + w(u,v)               // 更新路径长度到更小的那个和值。
                        previous[v] := u                    // 紀錄前趨頂點

 

如果我们只对在 s 和 t 之间查找一条最短路径的话,我们可以在第9行添加条件如果满足 u = t 的话终止程序。

通过推导可知,为了记录最佳路径的轨迹,我们只需记录该路径上每个点的前趋,即可通过迭代来回溯出 s 到 t 的最短路径

以上是整理了多方面的资料得到的,转载处未详细叙述,请见谅。

 

比较好的介绍 : http://dev.gameres.com/Program/Abstract/Arithmetic/AmitAStar.mht


Unity优质寻路插件A_Pathfinding_Project Pro v4.2.2 Unity作为一款领先的游戏开发引擎,为游戏设计者和开发人员提供了强大的工具集。它以其跨平台的兼容性,易用性,和丰富的功能库,受到了全球开发者的青睐。路径规划在AI领域中通常指的是计算机程序或智能系统在给定的环境中找到从起点到终点的最优路径的能力。该过程考虑了环境中的障碍物、成本、安全性和其他约束条件。路径规划的重要性不容小觑,尤其在机器人、自动化物流、自动驾驶汽车和视频游戏中扮演着关键角色。有效的路径规划可以显著提升效率,减少资源浪费,并在游戏开发中提升玩家体验。 阅读详情

相关推荐

Java实现高效A*路径寻找算法

A*算法,作为解决路径搜索问题的基石,已在游戏AI、机器人导航、交通规划等领域得到广泛应用。它结合了最佳优先搜索与Dijkstra算法的优点,通过评估函数来预测路径成本,并优先扩展那些看起来离目标最近的节点。其中,g(n)代表从起点到当前节点的实际代价,h(n)是启发式函数,对从当前节点到目标节点的预计代价进行估算。其独特优势在于兼顾了搜索效率与准确性,能够高效地找到最优解。

weixin_42527589的博客 1532

10种寻路算法

这也是一种适用于带权重的图的寻路算法,但与Dijkstra算法不同的是,Bellman-Ford可以处理图中存在负权重边的情况。:这是一种使用启发式方法来指导搜索过程的寻路算法,通常用于找到从起点到目标点的最短路径。:这是一种递归算法,它沿着图的深度遍历路径,直到找到目标或到达无法进一步前进的位置。:这种算法会扩展所有的节点,即按宽度优先的顺序,因此它通常用于搜索无权重图。:这是一种适用于带权重的图的寻路算法,它会找到从起点到所有其他点的最短路径。:这是一种用于寻找所有顶点对之间的最短路径的算法。

Gyp郭小帅的博客 6886

A*算法在栅格路径规划中的应用

栅格地图是路径规划领域中广泛采用的一种表示方法,尤其在自动化导航和机器人路径规划中有着重要的应用。栅格地图由一系列规则排列的栅格(或称为单元、像素)组成,每个栅格表示地图上的一个微小区域,整个地图是二维数组的抽象。栅格地图的特点可以概括如下:规则性:每个栅格的形状、大小和排列顺序是规则的,这使得路径规划算法易于计算和实现。离散性:地图信息是离散化的,每个栅格都对应一个状态,通常是可通行或不可通行(即障碍物)。状态空间大。

weixin_33419305的博客 1240

常见路径搜索算法(DFS,贪心,BFS,Dijkstra,A*,D*)总结

从DFS和BFS开始的路径搜索

妖米的博客 5613

模电仿真软件:MultSim14.3下载与安装

在setup文件夹中,找到【Install.exe】文件,然后右键单击选择【以管理员身份运行】(这一步超级重要,否则可能会出现权限不足导致安装失败)!解压完成后,打开解压出来的文件夹,找到并进入【setup】文件夹(这一步很重要,不要进错文件夹)。4、在弹出的安装向导中,仔细阅读许可协议后,选择【我接受】,然后点击【下一步】继续安装过程。首先我们需要将下载好的安装包解压到本地文件夹,确保有足够的磁盘空间(建议至少5GB以上)!按照安装向导的提示,点击【下一步】继续(保持默认设置即可,除非你有特殊需求)

weixin_44264994的博客 2334

QGIS插件实战:用百度地图AOI数据做个城市公园分析,从下载到出图全记录

本文详细介绍了如何利用QGIS的百度地图AOI插件进行城市公园分析,从插件安装、数据获取到空间分析与可视化全流程。通过实战案例演示了公园面积统计、服务范围缓冲区分析及专题地图制作,帮助用户高效完成城市绿地评估工作。

weixin_30790841的博客 556

python栈迷宫路径搜索_深度优先搜索(DFS)

python链栈算法,DFS深度优先搜索 算法通过尝试四个方向(上、下、左、右)来探索迷宫。它使用一个栈来记录当前路径。如果到达终点,它会打印路径并返回True。如果找不到路径,它会打印"走不通!"并返回False。 # 1. 当前所在节点四个方向分别为 x+1,y; x-1,y; x,y+1; x,y-1 # 2. 当前节点,也就是栈里的最后一个节点 stack[-1] # 3. 当走到终点时,就可以输出栈了 # 4. 没走到终点并且下一节点能走时,把该下一节点加入栈并标记为2,表示走过了

HYSliuliuliu的博客 1万+

莫兰指数stata命令_一文读懂16个sp系列stata空间计量命令及应用

spcompress:Compress Stata-format shapefile压缩数据成stata格式的shapefile2、Looking at data/观测数据2、Looking at data/观测数据grmap:Graph choropleth maps绘制等值区域图spdistance:Calculator for distance between places计算区域之间距离3...

weixin_39719989的博客 822

常见的寻路算法

不同的寻路算法适用于不同的场景,需要根据具体的问题特点,如图的规模、边的权重、是否需要最短路径等因素来选择合适的算法。请根据具体的问题修改图的结构和节点关系,以适应不同的寻路需求。

weixin_51782176的博客 2143

工业自动化中气动夹爪选型、调试与维护全流程实战解析

在工业自动化领域,气动执行元件是实现精准抓取与搬运的基础。其工作原理是通过压缩空气驱动气缸,转化为直线或旋转运动,从而控制夹爪的开合。这类技术因其结构简单、响应快速、成本低廉及维护方便,在自动化产线中具有极高的技术价值,是实现高效、可靠物料搬运的核心单元。其典型应用场景涵盖电子装配、汽车制造、食品包装等行业的上下料、分拣与定位工序。本文以工业自动化中常见的二指平行气动夹爪(常被工程师代号化为“Gripper-A”)为例,深入剖析其从硬件选型、气动系统集成到程序逻辑联锁的完整工程实践。内容聚焦于夹持力计算中惯

weixin_42629671的博客 366

DisplayPort信号通道深度解析:从物理层到协议栈

DisplayPort(DP)是一种面向高速串行通信的数字显示接口标准,其核心在于嵌入式时钟、自适应均衡与链路训练三位一体的物理层架构。不同于HDMI依赖独立时钟的TMDS方案,DP通过差分主链路(Main Link)承载编码数据流,以8b/10b或128b/132b编码实现高带宽与强鲁棒性。该技术价值体现在多速率自适应、误码恢复能力及对PCB布线与阻抗控制的严苛要求,广泛应用于8K显示、工业视觉、GPU直连等高性能场景。本文聚焦DP信号通道的管脚级实现、三层协议解耦(物理层/数据链路层/事务层)及链路训练

weixin_34214500的博客 256

图论——路径寻找问题(弗洛伊德算法和Dijkstra算法)

路径寻找问题可以归结为隐式图的遍历,它的任务是找到一条从初始状态到终止状态的最优路径,而不是像回溯法那样找到一个符合某些要求的解。 图的存储方式:邻接矩阵、邻接表、十字链表、邻接多重表等。这里介绍邻接矩阵。 参见百度百科: 邻接矩阵是表示顶点之间相邻关系的矩阵。 设G=(V,E)是一个有向图,其逻辑结构分为两部分,V和E集合。因为我们可以用一个二维数组存放顶点与顶点的权值,数组下标表示顶点...

GD_ONE的博客 3690

智能车八邻域图像算法

智能车八邻域图像算法

技术缝合怪的博客 4万+

Flame路径寻找算法:A*与Dijkstra在游戏中的应用

Flame路径寻找算法:A*与Dijkstra在游戏中的应用 【免费下载链接】flame A Flutter based game engine. 项目地址: https://gitcode.com/GitHub_Trending...

gitblog_01120的博客 1165

皮肤病识别 - 使用DenseNet或EfficientNet模型在ISIC数据集上进行皮肤病识别任务

在本篇博客中,我们探讨了如何使用 DenseNet 和 EfficientNet 模型在 ISIC 数据集上进行皮肤病识别任务。我们加载了数据集,并进行了预处理。然后我们使用 Keras 构建了两个不同的模型,并训练和评估了它们。最后,我们使用训练好的模型对新的皮肤病图像进行了预测。

斌擎科技 1307

【电源专题】Type-C母座外壳直接接主板GND还是接RC呢?别再纠结了!

Type-C屏蔽壳接地这件事,没有唯一标准答案。符合规范、贴合产品、能过认证,就是最优解。希望这篇文章能帮你理清思路。

一点硬件 601

Unity 实现A* 寻路算法

A* 寻路算法在Unity中的示例

YF云飞的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

A*算法实战——构建场景中的最优路径及实现NPC的自动寻路

A*(A-star)算法是一种静态网路中求解最短路径最有效的直接搜索算法。在电子游戏中最主要的应用是寻找地图上两点间的最佳路线。​

weixin_43757333的博客 3723

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

终极指南:如何在Flame引擎中实现A*算法的AI路径寻找

Flame是一款基于Flutter的游戏引擎,它提供了强大的工具和组件来帮助开发者创建高质量的2D游戏。在游戏开发中,AI路径寻找是一个关键功能,而A*算法是实现这一功能的高效解决方案。本文将详细介绍如何在Flame引擎中应用A*算法来实现AI角色的智能路径规划。 ## A*算法简介:游戏AI的寻路利器 A*(A-Star)算法是一种流行的路径寻找算法,它结合了Dijkstra算法和贪婪最佳优

gitblog_00539的博客 1073

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

游戏AI中的寻路算法(A*算法)

——个人笔记 本人学习《Unity人工智能游戏开发》的笔记

weixin_43701019的博客 2454

游戏开发中的人工智能(七):A* 路径寻找算法

接上文 游戏开发中的人工智能(六):基本路径寻找及航点应用本文内容:介绍路径寻找算法的主力——A* 路径寻找方法。A* 路径寻找算法路径寻找是游戏软件AI 最基本的问题之一。A* 算法是当今游戏软件开中,相当常用的一种。A* 算法之所以会如此吸引人,是因为它可以保证在任何起点及任何终点间找到最佳的路径。我们可以尽量使用 A* 算法,除了某些特殊情况的场景。例如,如果起点和终点之间没有障碍物,有明确的

学愈进而愈惘 6862

游戏AI-6:A*路径寻找算法

路径寻找设计得不好会让游戏角色看起来很愚笨很不真实。A*算法可以提供有效的办法来解决路径寻找问题。它可以保证在任何起点及任何终点间找到最佳的路径,当然,前提是确实存在这种路径。如果起点和终点间没有障碍物,有明确的视线,那么用A*算法就大可不必了;改用既快速又有效的视线移动算法比较好。如果CPU功能不太强,A*也可能不是最佳替代方案。虽A*很有效,但仍然会耗用不少CPU运算能力,尤其是,如果你必须同...

Just for fun的专栏 664

游戏人工智能——A*寻路算法实践

A*寻路算法实践 一、题目背景 随着多媒体设备、虚拟现实、增强现实、物联网等技术的飞跃发展,计算速度与存储容量的日益提高以及相关软件的研究取得长足进步,人工智能的应用得以进一步推广发展起来。地图寻径问题是人工智能技术的一个重要领域。在网络游戏中,寻径问题必须考虑多方面的因素,比如游戏地图中文件结构和起点与目标点之间是否可以连通以及游戏运行时运行内存资源占用、可扩展更新性、安全程度等。长久以来,游戏开发者在开发过程中为了实现这些绞尽脑汁。 在搜索寻径问题中,Dijkstra算法是目前许多工程解决最短路径

加载中....... 3482

人工智能算法之A*搜索算法

A* 搜索算法是一种高效的图形搜索算法,广泛应用于路径寻找和优化问题。通过结合实际代价和启发式代价,A*算法能够快速找到最优路径。虽然在大规模问题上存在内存消耗等问题,但其灵活性和保证最优性的特性使其在众多领域中仍然具有广泛的应用前景。

Lucas在澳洲 2198

游戏开发中的人工智能——A*路径寻找算法

转载至 阅读笔记-游戏开发中的人工智能-第7章-A*路径寻找算法 1. 简述     A*是当今游戏软件开发中十分常用的一种路径寻找算法。A*算法之所以会如此吸引人,是因为它可以保证在任何起点及任何终点间找到最佳的路径。我们可以尽量使用A*算法,除了某些特殊情况的场景。例如,如果起点和终点之间没有障碍物,有明确的视线,那么视线移动算法即快速又有效,就没有必要使用A*算法了。如果CPU的功能

Boyhou 的专栏 4311

Unity | A*寻路算法

A*(A-Star)简介在游戏开发的过程中,不免需要涉及到怪物AI的寻路或让玩家自动导航到目标点位置,当在没有障碍的场景中,直接让怪物/玩家向目标点移动即可,但在有障碍物的场景中(如迷宫,房间,围墙等等),寻路算法就变得尤为重要。A*是目前主流的寻路算法之一,它的作用就是寻找开始点与目标点之间,避开障碍的最短路径。

持续学习! 4078
上一篇: 游戏开发中的人工智能——有限状态机和神经网络
下一篇: 游戏开发——随机数和概率在游戏中的使用
小鱼人会飞
博客等级 码龄15年 32粉丝 133原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值