骨骼动画数据的处理方法及装置与流程

文档序号:12472174阅读:211来源:国知局
骨骼动画数据的处理方法及装置与流程

本发明涉及计算机领域,具体而言,涉及一种骨骼动画数据的处理方法及装置。



背景技术:

目前,电子游戏的种类繁多,其中较为流行的种类便属于动作角色扮演游戏。动作角色扮演游戏是指将动作游戏、角色扮演游戏和冒险游戏的要素合并的作品。而动作角色扮演游戏中极具标志性的要素即为游戏角色具备丰富的攻击或防御技能,而每个技能又会具备绚丽的特效及其对应的角色流畅的动画表现。

随着动作角色扮演游戏的飞速发展,游戏角色的技能表现也愈加复杂,进而出现部分需要一边跑动一边施放的技能。换言之,游戏角色的下半身需要继续维持跑步动画,而上半身则需要播放技能动画,继而对游戏角色技能动画的播放提出了更高的要求。相关技术中所提供的类似游戏均需要制作两套动画,其一是游戏角色一边跑步一边施放技能的动画,其二则是游戏角色站立施放技能的动画。然后在这两套动画之间根据游戏角色当前是否处于跑步状态而进行灵活切换。

然而,上述操作方式存在如下缺陷:如果游戏角色一直处于跑动中施法状态,那么当技能施放结束的时候,需要切换到跑步动画,此时下半身的腿部跑步动画与之前的跑步动画之间会产生突变,进而造成跑动过程中产生不和谐的“踢腿”现象。举例说明:假设游戏角色当前处于一边跑步一边射箭的状态,那么上半身的动作可以表现为游戏角色在射箭,而下半身的动作则可以表现为游戏角色在跑步,因此,上述“之前的跑步动画”便是指下半身的动作表现为游戏角色在跑步。另假设游戏角色的跑步动画表现为先迈出右腿再迈出左腿,然后一直循环。当游戏角色一边跑动一边施法时,腿上的动作恰好对应右腿落下准备迈出左腿的时机,施法结束。此时如果需要将游戏角色全身动作统一切换成新的跑步动作,但新的跑步动作设定先迈右腿的,这样,游戏玩家在游戏画面中便会看到游戏角色刚落下的右腿再次迈出,由此变成“踢腿”。在游戏玩家对游戏品质要求越来越高的今天,是难以被游戏玩家所接受的。

针对上述的问题,目前尚未提出有效的解决方案。



技术实现要素:

本发明实施例提供了一种骨骼动画数据的处理方法及装置,以至少解决相关技术中游戏角色在不同状态之间切换时易产生动画突变,从而导致游戏画面不和谐,影响用户体验的技术问题。

根据本发明实施例的一个方面,提供了一种骨骼动画数据的处理方法,包括:

获取游戏角色的第一骨骼动画数据集合和第二骨骼动画数据集合,其中,第一骨骼动画数据集合对应于游戏角色的初始状态,第二骨骼动画数据集合对应于游戏角色的待切换状态;在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画。

可选地,在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画包括:在保持第一权重值与第二权重值之和为固定值的情况下,在预设时长内逐渐缩小第一权重值并同步增大第二权重值,直至第一权重值为0且第二权重值为固定值时,停止对第一权重值与第二权重值进行调整,其中,第一权重值对应于第一骨骼动画数据集合,第二权重值对应于第二骨骼动画数据集合;根据实时调整的第一权重值和第二权重值,执行加权平均运算,确定待输出动画。

可选地,当初始状态为移动状态,待切换状态为技能释放状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前移动动作对应的权重值进行加权平均计算得到的上半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的上半身骨骼动画。

可选地,当初始状态为静止状态,待切换状态为技能释放状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个静止动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的全身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的全身骨骼动画。

可选地,当初始状态为同时处于技能释放状态和移动状态,待切换状态为同时处于技能释放状态和停止移动状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的下半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的下半身骨骼动画。

可选地,当初始状态为技能释放状态,待切换状态为技能释放状态结束时刻状态时,第一骨骼动画数据集合是从预设动画资源文件读取的与技能释放状态结束时刻状态对应的骨骼动画,第二骨骼动画数据集合是通过对游戏角色执行的前一个释放技能过程中持续动作对应的权重值与当前释放技能结束时待持续动作对应的权重值进行加权平均计算得到的全身骨骼动画。

根据本发明实施例的另一方面,还提供了一种骨骼动画数据的处理装置,包括:

获取模块,用于获取游戏角色的第一骨骼动画数据集合和第二骨骼动画数据集合,其中,第一骨骼动画数据集合对应于游戏角色的初始状态,第二骨骼动画数据集合对应于游戏角色的待切换状态;处理模块,用于在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画。

可选地,处理模块包括:调整单元,用于在保持第一权重值与第二权重值之和为固定值的情况下,在预设时长内逐渐缩小第一权重值并同步增大第二权重值,直至第一权重值为0且第二权重值为固定值时,停止对第一权重值与第二权重值进行调整,其中,第一权重值对应于第一骨骼动画数据集合,第二权重值对应于第二骨骼动画数据集合;处理单元,用于根据实时调整的第一权重值和第二权重值,执行加权平均运算,确定待输出动画。

可选地,当初始状态为移动状态,待切换状态为技能释放状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前移动动作对应的权重值进行加权平均计算得到的上半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的上半身骨骼动画。

可选地,当初始状态为静止状态,待切换状态为技能释放状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个静止动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的全身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的全身骨骼动画。

可选地,当初始状态为同时处于技能释放状态和移动状态,待切换状态为同时处于技能释放状态和停止移动状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的下半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的下半身骨骼动画。

可选地,当初始状态为技能释放状态,待切换状态为技能释放状态结束时刻状态时,第一骨骼动画数据集合是从预设动画资源文件读取的与技能释放状态结束时刻状态对应的骨骼动画,第二骨骼动画数据集合是通过对游戏角色执行的前一个释放技能过程中持续动作对应的权重值与当前释放技能结束时待持续动作对应的权重值进行加权平均计算得到的全身骨骼动画。

在本发明实施例中,采用获取游戏角色的第一骨骼动画数据集合和第二骨骼动画数据集合,该第一骨骼动画数据集合对应于游戏角色的初始状态,该第二骨骼动画数据集合对应于游戏角色的待切换状态的方式,通过在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画,达到了游戏角色在不同状态之间切换时,避免出现动画突变的目的,从而实现了在不同状态之间切换时,不同动作之间能够平滑过渡、完美衔接的技术效果,进而解决了相关技术中游戏角色在不同状态之间切换时易产生动画突变,从而导致游戏画面不和谐,影响用户体验的技术问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据本发明实施例的骨骼动画数据的处理方法的流程图;

图2是根据本发明优选实施例的骨骼动画数据处理的树形结构示意图;

图3是根据本发明实施例的骨骼动画数据的处理装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本发明实施例,提供了一种骨骼动画数据的处理方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

图1是根据本发明实施例的骨骼动画数据的处理方法的流程图,如图1所示,该方法包括如下步骤:

步骤S12,获取游戏角色的第一骨骼动画数据集合和第二骨骼动画数据集合,其中,第一骨骼动画数据集合对应于游戏角色的初始状态,第二骨骼动画数据集合对应于游戏角色的待切换状态;

步骤S14,在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画。

通过上述步骤,可以采用获取游戏角色的第一骨骼动画数据集合和第二骨骼动画数据集合,该第一骨骼动画数据集合对应于游戏角色的初始状态,该第二骨骼动画数据集合对应于游戏角色的待切换状态的方式,通过在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画,达到了游戏角色在不同状态之间切换时,避免出现动画突变的目的,从而实现了在不同状态之间切换时,不同动作之间能够平滑过渡、完美衔接的技术效果,进而解决了相关技术中游戏角色在不同状态之间切换时易产生动画突变,从而导致游戏画面不和谐,影响用户体验的技术问题。

可选地,在步骤S14中,在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画可以包括以下执行步骤:

步骤S141,在保持第一权重值与第二权重值之和为固定值的情况下,在预设时长内逐渐缩小第一权重值并同步增大第二权重值,直至第一权重值为0且第二权重值为固定值时,停止对第一权重值与第二权重值进行调整,其中,第一权重值对应于第一骨骼动画数据集合,第二权重值对应于第二骨骼动画数据集合;

步骤S142,根据实时调整的第一权重值和第二权重值,执行加权平均运算,确定待输出动画。

在优选实施例中,在常规使用骨骼动画数据来播放动画的基础上,新增动画树形结构,其原因在于:树形结构最终能够输出预设模型的所有骨骼动画,树形结构能够表示通过子节点的加权和进而计算出父节点应当执行的动画,最终在根节点输出所有节点的加权和,用以管理游戏角色在游戏中播放骨骼动画时每根骨骼的权重,从而使得游戏角色可以在执行但不限于以下操作之一时,游戏角色的上半身动画与下半身动画均能够完美的过渡,而不会发送突变:

(1)在跑动中施放技能;

(2)在技能施放完毕之前停止跑动;

(3)在技能施放完毕之后继续跑动;

(4)在站立状态释放技能之后开始跑动。

图2是根据本发明优选实施例的骨骼动画数据处理的树形结构示意图。如图2所示,Upperbody,Wholebody,Preani,Curani均为节点(Node),括号前面是节点的名称,括号里面的是节点的类型;每个节点均会存在三个数据,其可以包括:

(1)权重W,用于记录节点本身的权重;

(2)数组BW,用于记录所有骨骼的权重;

(3)M,用于记录每根骨骼的动画。

具体地,Upperbody用于表示游戏角色释放技能的动画,例如:游戏角色一边跑步一边射箭,如果将上半身的骨骼权重均设置为1,而下半身的骨骼权重均设置为0时,则仅保留游戏角色的上半身射箭动作。Wholebody用于表示游戏角色跑步或者站立的待机动画。PreAni用于表示游戏角色的前一个跑步或者站立动画。CurAni用于表示游戏角色当前执行的跑步或者站立动画。

源头节点(Source Node)类型的节点负责输出一个指定的动画,每根骨骼的动画均可以通过读取动画资源文件来加以获取并可以设置一个权重,节点本身可以设置一个权重;混合节点(Blend Node)类型的节点负责将所有子节点的动画按照节点的权重和骨骼的权重按照总权重为1来进行插值后输出一个新的动画,节点本身可以设置一个权重。

假设一个Blend Node的第i个子节点的权重为W(i),所有子节点的权重总和为Wsum,第j根骨骼的权重为BW(i)(j),所有子节点的第j根骨骼的权重为BWsum(j),所有第j根骨骼的动画为M(i)(j),那么,该Blend Node类型的节点的第j根骨骼的动画即为:

即得到所有子节点的骨骼动画的加权之和。

需要说明的是,Wholebody节点与UpperBody节点内均会保存每根骨骼的动画数据,其不同之处在于:UpperBody属于Source Node类型的节点,其动画数据是从美术人员制作的动画文件中读取出来的;而WholeBody属于Blend Node类型的节点,其动画数据是通过对子节点保存的每根骨骼的动画数据进行加权平均计算得到的。

在游戏初始化过程中,可以设置相邻动作之间的过渡时间为transTime(即上述预设时长),UpperBody节点的所有骨骼动画数据的权重为0,UpperBody节点的权重为0,WholeBody节点的所有骨骼动画数据的权重为1,WholeBody节点的权重为1。此时PreAni节点与CurAni节点尚不存在动画。

当游戏角色存在一个跑步动画或者站立动画需要播放时,可以待播放的动画设置到CurAni节点。此时,CurAni节点的权重为1,而PreAni节点仍然不存在动画。

当游戏角色需要从跑步动画切换至站立动画或者从站立动画切换至跑步动画时,可以先将CurAni节点的动画复制到PreAni节点,再将切换后的动画设置到CurAni节点。另外,还需要将PreAni的权重设置为1,并且在transTime时间内从1过渡到0(即在播新动作时,前一个动作还需要存在一段时间,由此不断修改两个相邻动画的权重以及不断计算两个相邻动画的加权和,由此得到一个流畅的由前一个动作过渡到最新动作的表现,当transTime为0时,表示前一个动作已完全消失,仅剩下最新动作),以及同步将CurAni的权重设置为0,并且在transTime时间内从0过渡到1,进而完成在transTime时间内,相邻动画之间的过渡。

可选地,当初始状态为移动状态(例如:跑步状态或行走状态),待切换状态为技能释放状态(例如:攻击状态或防御状态)时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前移动动作对应的权重值进行加权平均计算得到的上半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的上半身骨骼动画。

例如:当游戏角色在跑动过程中出现一个特定技能动画需要播放时,可以将该动画设置到UpperBody节点,以及将UpperBody节点的上半身骨骼动画数据的权重设置为0(相当于上述第二骨骼动画数据集合),并且在时间transTime内从0过渡到1,而WholeBody节点的上半身骨骼动画数据的权重设置为1(相当于上述第一骨骼动画数据集合),并且在时间transTime内从1过渡到0,进而完成在transTime时间内上半身跑步到技能动画的过渡,同时下半身维持在跑步动画。

可选地,当初始状态为静止状态(例如:站立状态或半蹲状态),待切换状态为技能释放状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个静止动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的全身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的全身骨骼动画。

例如:当游戏角色在站立状态下出现一个特定技能动画需要播放时,可以将该动画设置到UpperBody节点,以及将UpperBody节点的所有骨骼动画数据的权重设置为0(相当于上述第二骨骼动画数据集合),并且在时间transTime内从0过渡到1,而WholeBody节点的所有骨骼动画数据(即在站立状态下施放技能,希望腿部也存在技能动画,其可以是弓步,也可以是马步,而不希望还停留在站立待机动画)的权重设置为1(相当于上述第一骨骼动画数据集合),并且在时间transTime内从1过渡到0,进而完成在transTime时间内全身由站立动画到技能动画的过渡。

可选地,当初始状态为同时处于技能释放状态和移动状态,待切换状态为同时处于技能释放状态和停止移动状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的下半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的下半身骨骼动画。

例如:当游戏角色在技能施放过程中停止跑动时,可以将UpperBody节点的下半身骨骼动画数据的权重在时间transTime内从0过渡到1,WholeBody节点的下半身骨骼动画数据的权重在时间transTime内从1过渡到0,进而完成由一边跑动一边施放技能动画到完全为技能动画的过渡。

可选地,当初始状态为技能释放状态,待切换状态为技能释放状态结束时刻状态时,第一骨骼动画数据集合是从预设动画资源文件读取的与技能释放状态结束时刻状态对应的骨骼动画,第二骨骼动画数据集合是通过对游戏角色执行的前一个释放技能过程中持续动作对应的权重值与当前释放技能结束时待持续动作对应的权重值进行加权平均计算得到的全身骨骼动画。

例如:当游戏角色的技能施放完毕时,可以将UpperBody节点内所有权重为1的骨骼动画数据(相当于上述第一骨骼动画数据集合)的权重在时间transTime内从1过渡到0,WholeBody节点的全身骨骼动画数据(相当于上述第二骨骼动画数据集合)的权重在时间transTime内的从0过渡到1,由此便能完成在技能动画结束时刻所呈现跑动或者站立动画一直持续下去。

需要说明的是,将UpperBody节点内所有权重为1的骨骼动画数据与游戏角色在技能释放结束时刻所持续的状态相关,如果游戏角色在技能释放结束时刻所持续为跑动状态,则所有权重为1的骨骼动画数据表现为上半身骨骼动画数据;而如果游戏角色在技能释放结束时刻所持续为站立状态,则所有权重为1的骨骼动画数据表现为全身骨骼动画数据。

在上述优选实施方式中,由于分离了上半身动画与全身动画,上半身动画的播放过程和全身动画的播放过程互不影响,也不会发生在跑步动画播放过程中又切换到跑步动画的突变情况,因此,在跑步动画播放过程中不会出现前述不和谐的“踢腿”现象;另外,在游戏角色跑动过程中施放特定技能,以及在施放特定技能完毕后又还原为跑步动画,均不需要重新播放跑步动画,从而解决了动画突变的问题,实现完美的动作过渡。

根据本发明实施例,提供了一种骨骼动画数据的处理装置的实施例,图3是根据本发明实施例的骨骼动画数据的处理装置的结构框图,如图3所示,该装置可以包括:获取模块10,用于获取游戏角色的第一骨骼动画数据集合和第二骨骼动画数据集合,其中,第一骨骼动画数据集合对应于游戏角色的初始状态,第二骨骼动画数据集合对应于游戏角色的待切换状态;处理模块20,用于在预设时长内对第一骨骼动画数据集合与第二骨骼动画数据集合进行同步调整,确定待输出的动画。

可选地,处理模块20可以包括:调整单元(图中未示出),用于在保持第一权重值与第二权重值之和为固定值的情况下,在预设时长内逐渐缩小第一权重值并同步增大第二权重值,直至第一权重值为0且第二权重值为固定值时,停止对第一权重值与第二权重值进行调整,其中,第一权重值对应于第一骨骼动画数据集合,第二权重值对应于第二骨骼动画数据集合;处理单元(图中未示出),用于根据实时调整的第一权重值和第二权重值,执行加权平均运算,确定待输出动画。

可选地,当初始状态为移动状态,待切换状态为技能释放状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前移动动作对应的权重值进行加权平均计算得到的上半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的上半身骨骼动画。

可选地,当初始状态为静止状态,待切换状态为技能释放状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个静止动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的全身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的全身骨骼动画。

可选地,当初始状态为同时处于技能释放状态和移动状态,待切换状态为同时处于技能释放状态和停止移动状态时,第一骨骼动画数据集合是通过对游戏角色执行的前一个移动动作对应的权重值与当前静止动作对应的权重值进行加权平均计算得到的下半身骨骼动画,第二骨骼动画数据集合是从预设动画资源文件读取的下半身骨骼动画。

可选地,当初始状态为技能释放状态,待切换状态为技能释放状态结束时刻状态时,第一骨骼动画数据集合是从预设动画资源文件读取的与技能释放状态结束时刻状态对应的骨骼动画,第二骨骼动画数据集合是通过对游戏角色执行的前一个释放技能过程中持续动作对应的权重值与当前释放技能结束时待持续动作对应的权重值进行加权平均计算得到的全身骨骼动画。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1