专利名称:一种角色动画实现方法及系统的制作方法
技术领域:
本发明涉及一种角色动画实现方法及系统,其属于计算机图像显示技术领域。
背景技术:
在游戏中,为了满足玩家个性化的需求,往往需要设计大量的图素,并通过复杂的换装系统丰富图素的输出。因此,动画显示技术中经常要面临以下问题。有的画面包括了大量的图素,例如一个游戏画面中包括了多个玩家角色,每个角色具有各不相同的造型,并且同时进行各不相同的动作操作。现有的动画输出技术包括动态加载和静态加载方式。所述动态加载是指当用到某一个图素时,才把该图素从硬件存储空间加载到内存;所述静态加载是指在程序开始时,把所有的图素加载到内存中,等待应用程序调用。当画面中包含大量图素的时候,若使用动态加载的方式输出画面,采用动态加载方式,如果画面图素过多, 大量的数据会导致硬件输入I/O的阻塞而引起程序阻塞,导致动画画面输出不连续,影响动画输出质量;若使用静态加载的方式输出动画,该方法需要预先加载大量的数据,而导致启动程序时间过长和占用内存过多的问题。为了解决上述问题,现有游戏中的动画显示技术多采用如下的方案程序开始时, 加载部分图素到内存中,可以根据需求,在程序中预先确定所要加载的图素;程序过程中, 若当前要显示的图素不再内存当中,则淘汰内存中的部分图素,释放空间后加载要使用的图素。现有的方法的缺陷在于由于在启动时,需要加载部分图素,因此导致较长的程序启动时间。专利ZL200510131814. X中提高了采用预置帧显示规则解决这个问题,但是其在加载图素前判断内存空间不足,采用淘汰内存中最久未使用的图素。但是最久为使用的图素可能在使用的时候被大量调用过,这样会导致图素的重复导入,浪费大量的时间和资源。
发明内容
为解决上述问题,本发明的目的是提供一种角色动画实现方法及系统,该方法能够减少动画加载过程中的硬件I/O阻塞,并减少内存占用容量。为解决上述技术问题,本发明提供了一种角色动画实现方法及系统,包括预置帧显示规则,用于选取组成动画的所有帧中的部分帧进行显示输出;根据所述的帧显示规则, 获取当前显示循环中需要加载显示的帧的编号;判断所述需要加载显示的帧是否已被加载到内存,若是则直接显示;否则加载该编号的帧到内存并进行输出显示。其中,所述规则为选取动画中编号为等差排列的帧进行显示。该规则的一种算法为=Xl = floor (floor (X/F) *F+mod (X, F)/Pl) *P1,其中F为动画总帧数,Pl为动画质量系数,Xl为当前选取显示的帧编号,X为顺序播放F帧时当前显示循环对应于的帧编号。其中,动画质量系数Pl以等比数列设置,以对应于不同帧缩减数;进而在动画显示之前通过确定动画质量系数Pl。在上述方法基础上,采用C++标准库提供的MAP储存所加载图素的信息,通过遍历 MAP,判断当前要加载的图素是否已在内存中。
在上述方法基础上,进一步限制每一显示循环中图素的加载量;进而,若在确定的显示循环中需要显示的图素未能加载到内存,则调用该动画在内存中最近一次显示循环中加载的图素。具体的,限制图素加载量的方法可采用判断已加载图素的总容量与当前要加载的图素容量之和是否不小于门限值,若大于则停止该显示循环中加载图素的操作。在上述方法基础上,加载图素前判断内存空间大小,若内存空间不足,则采用下述方法淘汰图片,方法如下P = Pl氺a/b+P2氺c/d ;其中P1表示个人对最长时间没出现图片的偏好;P2表示个人对出现频率最少的图片的偏好;a表示一个图片出现的总次数;b表示运行总次数;c表示该图片出现的次数序号之和;d表示运行次数序号之和。本发明在内存空间不足时,采用对最近未出现图片和出现频率最低的图片的权重,同时加入个人偏好,不但很好的降低了系统负荷,提高了动画输出的流畅性,同时也满足了不同人的不同要求,进步提高了此方法的可用性。
具体实施例方式本发明提供了一种角色动画实现方法及系统;所述动画由一组连续的并具有渐变效果的图片组成,每张图片称为一帧,一个动画通常用于表现一个完整的动作,帧数越多, 动作表现得越平滑。所述帧即为每个显示循环中显示的图片(图素)例如,一个蝴蝶翅膀扇动的动画,由数幅翅膀位置不同的图片连续组成,当图片连续播放时即显示为翅膀扇动的效果。在动画中包含了若干个显示循环,动画画面的绘制是以时间为周期的循环过程,在每个显示循环内完成一次画面展现和必要的逻辑运算;每个显示循环内,画面内所有的动画都显示一帧,循环的时间可根据需要定制,例如,现有游戏中通常将动画显示循环的周期设置为50毫秒。在以上公知概念基础上,具体说明本发明的优选实施例。为了在动画显示输出过程中达到减少硬件I/O阻塞以及节省内存空间,以保证动画显示流畅的目的,本实施例的核心包括一下三方面的内容。1)对一幅动画中的帧进行删减,以使动画输出过程中节省内存空间。假设一幅动画由编号为1到10的10个帧组成。本发明的原则是按照一定的规则在动画时长不变的情况下,可以只加载并显示编号为1,3,5,7,9的帧,或者只加载显示编号为1,5,9的帧。具体的,如以下给出的算法实例,设请求绘制一幅动画的第X帧,按照下面的公式进行计算,实际加载显示的帧Xl为Xl = floor (floor (X/F) *F+mod (Χ, F) /Pl) *P1其中F为该动画的总帧数,即组成该动画的图片总数;floor为取整函数,mod为取余函数,X指代请求绘制的帧,Xl指代实际显示输出的帧,Pi为本实施例中设置的动画质量系数。在上述算法中,通过系数P实现对动画帧缩减程度的控制,本实施例中采用等比数列的算法设置P1,对P取值设置一个范围;进而为用户提供一个动画质量的选项,例如选项内容可包括高级动画质量、中级动画质量、低级动画质量等;该些选项分别对应于P的几个值。用户可以根据自己机器的配置优劣,通过选择选项内容间接修改Pi的值,如果机器配置低,则用户可以选择低级动画质量,那么这个动画最终加载显示的帧数就少,即由上文所举算法公式可知,动画质量越低,X与Xl的间隔数越高,加载显示的帧数越少。上文所举实例采用等比数列的算法对不同质量要求的进行帧的删减,在本发明中,依据业务应用的具体需求可采用其他算法,例如其他线性或非线性的算法选择动画中的部分帧进行显示输出。具体算法和参数配置方式本领域技术人员可以自行定制。举例比如有一个角色的跑步动画,包含20个关键帧。帧数编号从1 一直到20。 在这20帧动画中,每一帧的位置都与上一帧有着微小的差距。但是从差距大小上来看并不不是很大。对于动画的质量要求越高,那么对应的关键帧也就越多。一般上当每秒播放30个关键帧的时候,人对这种微小的差距就么有了什么感觉。对于我们的动画来说,如果他在一秒中播放了 60帧,这个时候这个动画必然会占用更多的硬件资源,而且这个效果完全是多余的。所以我们采用上述的方法对动画的关键帧数进行删减。采用我们的30帧标准, 我们可以对这60帧动画进行对半的帧数精简,以达到提高资源利用率,减少内存损耗的目的。如取动画的质量系数为2时,即显示的关键帧是1,3,5,7,9等。在第二个显示循环中, 系统通过上述公式计算得出当前加载的帧仍是第1帧,此时不需重新进行第1帧加载的操作,而直接调用已加载到内存中的第1帧进行输出,即所选每一帧在保持连续两个显示循环的输出,即所选每一帧在保持连续两个显示循环的输出,依此类推该动画仍使用30个显示循环完成了主角跑步过程的展现。下表中是动画质量系数分别等于2和4时的帧加载情况。2)控制每个显示循环中的图素加载量。每个显示循环中,都会加载一定容量的图素到内存。所述图素对应着动画中的一帧,是图像的最小绘制单元。本发明中进一步通过对每个显示循环中的流量进行控制,保证了在一个显示循环内能够合理的分配资源完成图素的计算、图素的加载以及图素的绘制; 并且,如果在确定的显示循环中需要显示的某动画的图素未能加载到内存,则调用该动画在内存中最近一次显示循环中加载的图素。为了实现该目的,具体实现中可设置一个门限值Q作为每次显示循环时可以加载图素的最大容量,该门限值Q可通过具体的业务需求、实际经验值以及根据内存和硬盘的计算速度确定;设置一个参数Q1,用于记录每次显示循环时图素加载的总容量。当图素的加载容量Ql大于或者等于设定的最大容量Q时,则在当前显示循环中,停止加载图素到内存。如果在当前显示循环中需要显示的图素未能加载到内存中,则查找最近一次的显示循环中该动画所使用的图素进行显示。当本次显示循环结束时,将Ql值清零,开始下一个显示循环图素加载量的计算。例如,还是以人物的跑步动画作为例子,这个动画,使用5个显示循环完成角色跑步的过程,并且每个显示循环显示一帧的画面,帧编号分别为1、2、3、4、5。设在下一个显示循环中将显示第3帧,则需加载第3帧画面中的各图素到内存。假设在采用上述流量控制的情况下,由于第三帧加载到内存的图素量达到了预置的门限,使得第三帧的动画为加载到内存中。这个时候根据动画的连续性,选择最近一次播放的动画来作为此次的绘制输出。本举例中,在加载图素前,判断已加载图素的总容量与当前要加载的图素容量之和是否大于或等于门限值,若是,则调用该动画在内存中最近一次显示循环中所加载的图素。否则,加载显示当前要加载的图素。本发明中并不排除其他设置内存占用门限的方法, 如内存占用率等。3)对内存的管理。每个显示循环都包括往内存中加载图素的操作,当内存空间不足时,采用,则采用下述方法淘汰图片,方法如下P = Pl*a/b+P2*c/d ;其中P1表示个人对最长时间没出现图片的偏好;P2表示个人对出现频率最少的图片的偏好;a表示一个图片出现的总次数;b表示运行总次数;c表示该图片出现的次数序号之和;d表示运行次数序号之和,以释放内存空间,用于加载新的图素。以上具体介绍了本发明中所采用的部分技术手段。本发明的操作步骤1)当内存空间不足时,,则采用下述方法淘汰图片,方法如下P = Pl*a/b+P2*c/d ;其中P1表示个人对最长时间没出现图片的偏好;P2表示个人对出现频率最少的图片的偏好;a表示一个图片出现的总次数;b表示运行总次数;c表示该图片出现的次数序号之和;d表示运行次数序号之和。2)依据预置的算法计算当前显示循环中实际加载的帧Xl ;判断帧Xl是否已被加载到内存,若否则进行步骤3,否则之间进行输出示;本实施例中采用C++标准库提供的MAP 储存所加载图素的信息,通过遍历MAP,可判断当前要加载的图素是否已在内存中;3)计算当前显示循环中已加载的图素容量;4)判断当前已加载容量是否达到预置门限,若否则进行步骤15,若时则进行步骤 6 ;5)继续加载动画第Xl帧的图素;6)对于未能加载的图素,返回最近一次绘制动画所使用的帧。操作结束。
权利要求
1. 一种角色动画实现方法及系统,包括预置帧显示规则,用于选取组成动画的所有帧中的部分帧进行显示输出;根据所述的帧显示规则,获取当前显示循环中需要加载显示的帧的编号;判断所述需要加载显示的帧是否已被加载到内存,若是则直接显示;否则加载该编号的帧到内存并进行输出显示;所述规则为选取动画中编号为等差排列的帧进行显示;该规则的算法为xi = floor(floor(X/F)*F+mod(X,F)/Pl)*Pl,其中F为动画总帧数, Pl为动画质量系数,Xl为当前选取显示的帧编号,X为顺序播放F帧时当前显示循环对应于的帧编号。其中,动画质量系数Pl以等比数列设置,以对应于不同帧缩减数;进而在动画显示之前通过确定动画质量系数Pl ;采用C++标准库提供的MAP储存所加载图素的信息, 通过遍历MAP,判断当前要加载的图素是否已在内存中;进一步限制每一显示循环中图素的加载量;在确定的显示循环中需要显示的图素未能加载到内存,则调用该动画在内存中最近一次显示循环中加载的图素;限制图素加载量的方法采用判断已加载图素的总容量与当前要加载的图素容量之和是否不小于门限值,若大于则停止该显示循环中加载图素的操作;其特征在于在加载图素前判断内存空间大小,若内存空间不足,则采用下述方法淘汰图片,方法如下P = Pl*a/b+P2*c/d ;其中P1表示个人对最长时间没出现图片的偏好;P2表示个人对出现频率最少的图片的偏好;a表示一个图片出现的总次数;b表示运行总次数;c表示该图片出现的次数序号之和;d表示运行次数序号之和。
全文摘要
本发明涉及一种角色动画实现方法及系统;其属于计算机图像显示技术领域。本发明在内存空间不足时,采用对最近未出现图片和出现频率最低的图片的权重,同时加入个人偏好,不但很好的降低了系统负荷,提高了动画输出的流畅性,同时也满足了不同人的不同要求,进步提高了此方法的可用性。
文档编号G06T13/40GK102521866SQ20111036251
公开日2012年6月27日 申请日期2011年11月16日 优先权日2011年11月16日
发明者戚军 申请人:戚军