一种多个动画文件的合并显示方法

文档序号:6537151阅读:173来源:国知局
专利名称:一种多个动画文件的合并显示方法
技术领域
本发明涉及动画制作技术领域,尤其涉及一种多个动画文件的合并显示方法。
背景技术
当前,即时通讯(IM)工具已经得到越来越广泛的应用,人们在利用IM工具实现即时通信的同时,对IM工具的服务质量也有了更高的要求,其中,由于显示在IM工具上的个人虚拟形象能够代表IM工具使用者的许多特征,因此,备受IM工具使用者的关注,由此,需要提高IM工具上个人虚拟形象的显示质量,以达到提高IM工具服务质量的需要。
在现有技术中,采用动画图像作为个人虚拟形象,以替代最初所采用的静止图像,以达到提高显示质量的需要。在实际应用过程中,允许IM工具使用者在例如脸形、发型、衣服、背景、装饰物等虚拟形象组成元素中进行选择,以利用所选择的元素最终构成动画图像来作为虚拟形象。各个组成元素分别具有多个备选元素以供选择,各个备选元素分别以动画文件的形式保存,当IM工具使用者选择相应的备选元素后,通过预先提供的脚本命令,将这些备选元素所对应的动画文件动态加载到一个动画文件中,通过显示该动画文件则可实现以动画的方式显示个人虚拟形象。
在现有技术中,只是通过脚本命令将各个动画文件动态加载到一个动画文件中,实际上并没有将各个动画文件合并到一个动画文件中,这样做虽然能够在视觉效果上达到合并多个动画文件的效果,但是,由于各个动画文件分别具有各自的存放路径,因此,需要提供这些存放路径给脚本命令,脚本命令还需要根据这些存放路径分别获得各个动画文件来实现动态加载,从而增加了合并多个动画的工作量和实现难度,不利于采用动画方式作为个人虚拟形象的具体实现。同样,在其它需要将多个动画合并显示的实际应用中,由于现有技术并没有将多个动画文件实际合并到一个动画文件中,因此,也存着上述工作量大以及不易实现的问题。

发明内容
有鉴于此,本发明的主要目的在于提供一种多个动画文件的合并显示方法,该方法能够将多个需要合并显示的动画文件实际合并到一个动画文件中并显示,从而减少多个动画合并显示过程中的工作量,降低实现难度。
为实现上述目的,本发明提供了一种多个动画文件的合并显示方法,该方法包括步骤A为各个需要合并的动画文件分配独立的显示层;步骤B将各个动画文件的显示内容放置到各自所分配得到的层中;步骤C将所有层中的显示内容在一帧中按照一定的层次关系全部显示出来。
其中,所述动画文件为震荡波格式(Swf)文件,步骤A包括步骤A1为需要合并的动画文件分别创建子动画;步骤A2为所创建的子动画分别分配独立的显示层。
其中,步骤A1为按照各个Swf文件合并的先后次序,顺序为每个需要合并的Swf文件创建一个动画定义标签块,并为各个动画定义标签块分别确定一个全局唯一的对象标识;步骤A2为为每个创建的动画定义标签块分别创建一个与之对应的放置对象标签块,确定每个放置对象标签块所指明的二元数组(对象标识,层序号),其中,确定该二元数组(对象标识,层序号)中的对象标识为与该放置对象标签块相对应的动画定义标签块的对象标识,确定该二元数组(对象标识,层序号)中的层序号为一个未被其它显示对象占用的层的层序号。
其中,所述为各个动画定义标签块分别确定一个全局唯一的对象标识为
将需要合并的Swf文件的顺序号作为为该Swf文件所创建的动画定义标签块的对象标识。
其中,所述确定该二元数组(对象标识,层序号)中的层序号为一个未被其它显示对象占用的层的层序号为将需要合并的Swf文件的顺序号作为为该Swf文件所分配的独立的层的层序号,将该层序号作为所述二元数组(对象标识,层序号)中的层序号。
其中,所述动画文件为Swf文件,步骤B包括步骤B0更新需要合并的动画文件的显示对象标识,以使得该显示对象标识在合并之后全局唯一;步骤B1将需要合并的Swf文件的定义标签块放置到为该文件所创建的动画定义标签块之前;步骤B2将需要合并的Swf文件的控制标签块放置到为该文件所创建的动画定义标签块之中,作为该动画定义标签块的子动画标签块;步骤B3需要合并的Swf文件利用为其所创建的放置对象标签块,将为该Swf文件所创建的动画定义标签块所定义的显示内容放置到为该Swf文件所分配的独立的显示层中。
其中,在步骤B0中,所述更新各个动画文件的显示对象标识为遍历需要合并的Swf文件中的每个标签块的各个对象标识,为标签块中出现与已经分配的对象标识相冲突的对象标识重新分配对象标识,并将在该Swf文件的其余标签块中出现的该对象标识也更新为重新分配后的对象标识。
其中,该方法进一步包括分别统计各个需要合并的Swf文件中的显示帧标签块的个数,然后分别用统计得到的个数更新对应的为Swf文件所创建的动画定义标签块中的帧数值。
其中,步骤B3中,所述将为该Swf文件所创建的动画定义标签块所定义的显示内容放置到为该Swf文件所分配的独立的显示层中为放置对象标签块将其所指明的二元数组(对象标识,层序号)添加到显示列表中;其中,对象标识为所述为该Swf文件所创建的动画定义标签块的对象标识,层序号为所述为该Swf文件所分配的独立的显示层的序号。
其中,步骤C包括显示帧标签块,根据显示列表中的各个二元数组(对象标识,层序号)的内容,在一帧中依次播放各层的显示内容。
可见,本发明能够将需要合并显示的多个动画文件实际合并到一个动画文件中,无需在合并显示过程中使用各个动画文件的存放路径,从而减少了动画文件合并显示过程中的工作量,降低了动画文件合并显示的实现难度。


图1为本发明一实施例中第5个Swf文件的示意图。
图2为实现本发明的流程图。
图3为本发明中构建的Swf原型的示意图。
图4为本发明中更新对象标识之后的第5个Swf文件的示意图。
图5示出了本发明一实施例中,将第5个Swf文件合并到Swf原型中后的结果。
具体实施例方式
本发明为一种多个动画文件的合并显示方法,该方法为各个需要合并显示的动画文件分别分配唯一的显示层,并且更新各个动画文件中的对象标识值,使得各个对象标识值在合并后的动画文件中全局唯一,然后,将各个动画文件的显示内容放置到各自所分配得到的层中,最后,再将所有层中的显示内容在一帧中按照一定的层次关系全部显示出来,从而实现多个动画文件的合并显示。
下面,以Flash技术中的动画合并显示为例,对本发明进行详细描述,该描述的目的只在于对本发明进行说明,并不在于限定本发明的保护范围,本发明同样可以应用于其它形式的动画文件之中。
在Flash的实际应用中,动画文件以震荡波格式(Swf)文件格式保存,Swf文件播放器读取Swf文件中的内容并根据该内容播放Flash动画。Swf文件由头部信息和数据信息组成,其中,头部信息包括播放该Swf文件所需要的一些公共信息,例如是否压缩、版本信息、显示区域等,数据信息则由多个标签块(Tag)顺序组成,每个标签块分别具有各自的标签类型(Tid)、标签块长度、以及标签块数据,结束(end)标签块位于Swf文件的末尾,作为该文件的结束标志。
上述的标签块分为两类,分别是定义标签块(Definition tag)和控制标签块(Control tag),其中每个定义标签块用于定义一个对象,并为每个对象分配一个唯一的对象标识(Cid),定义标签块分为两种类型,下面分别对这两种类型进行介绍1、形状定义(DefineShape2)标签块,该标签块的Tid为22,用于为对象定义例如圆形、矩形等的形状,并为所定义的对象分配一个Cid;2、动画定义(DefineSprite)标签块,该标签块的Tid为39,用于定义一个动画对象并为该动画对象分配一个Cid,同时,该标签块还指明该动画所包含的帧数(FC,FrameCount);动画定义标签块中的标签块数据又是由一组嵌套的子标签块组成,这些子标签块只能是控制标签块,而不能包含任何定义标签块;通过动画定义标签块,实际上相当于在主动画下定义一个子动画,这样,在显示主动画的过程中,就能够通过调用子动画实现将主动画和子动画以一定的帧率同时播出。
以上对定义标签块进行了介绍,下面对控制标签块进行介绍控制标签块用于负责对动画显示过程中的操作进行控制,主要包括三种类型1、显示帧(ShowFrame)标签块,该标签块的Tid为1,用于显示当前帧;在Swf播放器中,设置了一个显示列表,该显示列表由多个二元数组组成,每个二元数组的组成形式为(Lid,Cid),其中,Lid表示层的层序号,该二元数组表示在第Lid层上显示对象标识为Cid的对象;对于动画中所定义的各个对象,每一层只能放置一个对象,并且,放在上层的对象将覆盖放在下层的对象,显示帧标签块根据显示列表中的各个二元数组的内容,将各个显示对象按照一定的先后的层次顺序显示出来;2、放置对象(PlaceObject2)标签块,该标签块的Tid为26,该标签块指明Lid和一个Cid,用于在显示列表中增加由该Lid和Cid所构成的二元数组(Lid,Cid),通过这种方式,能够将Cid所对应的对象放置到Lid所对应的层;该标签块只用于放置,并不用于显示所放置的对象,而是需要后续的显示帧标签块出现时才显示相应对象;3、移出对象(RemoveObject2)标签块,该标签块的Tid为28,该标签块同样指明Lid和一个Cid,但与放置对象标签块相反的是,该标签块将该Lid和Cid所构成的二元数组(Lid,Cid)从显示列表中删除,以便将Cid所对应的对象从Lid所对应的层移出,在利用该标签块移出对象之后,后续的显示帧标签块出现时,就不再会将显示类标中的第Lid层上的Cid对象显示出来了。
另外,在Swf文件中,还经常会出现动画定义标签块嵌套子动画标签块的情况,其中,各个子动画标签块分别具有各自独立的显示列表以及用于显示各个对象的一组层,从而使得各个子动画标签块之间、以及子动画标签块和动画定义标签块之间不会出现层的相互冲突问题;下面结合一个具体实例,对子动画标签块的嵌套进行介绍参见图1,在一个Swf文件中,定义动画标签块(Tid=39)嵌套了子动画标签块,该子动画标签块依次为放置对象标签块(Tid=26),该标签块指明一个二元数组(1,1),从而将Cid为1的对象放置在该子动画标签块中的第1层;显示帧标签块(Tid=1),该标签块显示该子动画标签块中的第1层的Cid为1的对象,从而显示子动画标签块的第一帧;
放置对象标签块(Tid=26),该标签块指明一个二元数组(2,2),从而将Cid为2的对象放置在该子动画标签块中的第2层;显示帧标签块(Tid=1),该标签块显示该子动画标签块中的第2层的Cid为2的对象,从而显示子动画标签块的第二帧;结束标签块(Tid=0),用于表示该子动画标签块结束。
参见图1,在运行该Swf文件的过程中,控制标签块中的放置对象标签块(Tid=26)将动画定义标签块(Tid=39,Cid=3)所定义的动画放置到第1层,由于动画定义标签块(Tid=39,Cid=3)嵌套有如上所述的子动画标签块,因此,运行所嵌套的子动画标签块之后,能够将Cid为1的对象以及Cid为2的对象依次显示在第1层中。
以下,对本发明进行详细描述。
参见图2,实现本发明需要以下步骤步骤201为各个需要合并的动画文件分配独立的显示层;步骤202将各个动画文件的显示内容放置到各自所分配得到的层中;步骤203将所有层中的显示内容在一帧中按照一定的层次关系全部显示出来,从而实现多个动画文件的合并显示。
下面对以上步骤的具体实现进行介绍一、步骤201的具体实现参见图3,在本发明实施例中,通过构建图3所示的Swf原型,来实现为各个需要合并的Swf文件分配独立的显示层,具体为按照各个Swf文件合并的先后次序,顺序为每个需要合并的Swf文件创建一个动画定义标签块(Tid=39),并为每个动画定义标签块分别确定一个全局唯一的Cid,通过创建动画定义标签块实现为需要合并的动画文件分别创建子动画,然后,为创建的动画定义标签块分别创建一个与之对应的放置对象标签块(Tid=26),确定每个放置对象标签块所指明的二元数组(Cid,Lid),其中,确定该二元数组(Cid,Lid)中的Cid为与该放置对象标签块成组对应的动画定义标签块的Cid,确定该二元数组(Cid,Lid)中的Lid为一个未被其它显示对象占用的层的层序号,从而实现为各个创建的子动画分配独立的显示层,进而利用子动画实现为各个Swf文件分配独立的显示层;在本发明优选实施例中,为了简化运算,为创建的动画定义标签块确定Cid,以及确定该二元数组(Cid,Lid)中的Lid为一个未被其它显示对象占用的层的层序号可采用如下方式进行将需要合并的Swf文件的顺序号作为为该Swf文件所创建的动画定义标签块的Cid;将需要合并的Swf文件的顺序号作为为该Swf文件所分配的独立的层的层序号,将该层序号作为所述二元数组(Cid,Lid)中的Lid;进一步的,为了更加简化运算,在本发明优选实施例中,可以采用需要合并的Swf文件作为为该Swf文件所创建的动画定义标签块的Cid,并将为该Swf文件所创建的放置对象标签块所指明的二元数组中的Cid和Lid直接分别指定为该Swf文件的序号。图3所示就是这一优选实施例的具体实现,由图3可见共有N个需要合并的Swf文件,其中N为自然数,分别为每个Swf创建动画定义标签块和放置对象标签块,其中,动画定义标签块的Cid分别为该动画定义标签块所对应的Swf文件的序号,放置对象标签块所指明的二元数组则为(i,i)的形式,其中,i为该放置对象标签块所对应的Swf文件的序号;在图3中,由于初始状态下动画定义标签块所包含的子动画帧数为0,因此,各个动画定义标签块的FC参数分别初始化为0。
二、步骤202的具体实现在步骤202的具体实现中,需要对各个动画文件的显示对象标识进行更新,以避免出现显示对象标识相互冲突的问题,下面对该更新过程进行介绍在一个Swf文件中,所有的对象标识Cid必须全局唯一,因此,在本发明中必须为每个需要合并的Swf文件进行Cid的更新,以满足该要求;在本发明实施例中,设计一个全局的Cid分配器,该分配器遍历需要合并的Swf文件中的每个标签块的各个对象标识,为标签块中出现与已经分配的对象标识相冲突的对象标识重新分配对象标识,并将在该Swf文件的其余标签块中出现的该对象标识也更新为重新分配后的对象标识;例如,在将形状定义标签块的Cid重新分配之后,需要将出现在例如放置对象标签块和移出对象标签块中的该Cid也更新为重新分配后的Cid;在进行对象标识更新后,实现步骤202还需要以下步骤步骤2021将需要合并的Swf文件的定义标签块放置到为该文件所创建的动画定义标签块之前;进行该步骤的原因在于由于Swf播放器规定,在显示一帧时,显示列表中所涉及到的对象都必须在显示帧标签块之前被定义,因此,需要将Swf文件中的所有定义标签块放置在与其对应的动画定义标签块之前;步骤2022将需要合并的Swf文件的控制标签块放置到为该文件所创建的动画定义标签块之中,作为该动画定义标签块的子动画标签块;由于控制标签块决定了如何播放已经定义的各个对象,因此,将Swf文件中的控制标签块作为为该Swf文件所创建的动画定义标签块之中,就可以实现将一个Swf文件中的显示内容合并到一个子动画中;步骤2023需要合并的Swf文件利用为其所创建的放置对象标签块,将为该Swf文件所创建的动画定义标签块所定义的显示内容放置到为该Swf文件所分配的独立的显示层中;在本发明实施例中,根据放置对象标签块所指明的二元数组(对象标识,层序号),实现将对象标识所对应的动画定义标签块中的显示内容放置到层序号所对应的层中;其中,放置对象标签块通过将其所指明的二元数组(对象标识,层序号)添加到显示列表中,实现将对象标识所对应的动画定义标签块中的显示内容放置到层序号所对应的层中,但是并不显示动画定义标签块中的显示内容;
通过以上步骤即可实现步骤202,在本发明其它实施例中,为了能够更好的满足动画显示的需要,还可进一步包括以下步骤步骤2024分别统计各个需要合并的Swf文件中的显示帧标签块的个数,然后分别用统计得到的个数更新对应的为Swf文件所创建的动画定义标签块中的FC值。
三、步骤203的具体实现利用显示帧标签块,根据显示列表中的各个二元数组内容,在一帧中依次播放各层的显示内容,从而在一帧中实现多个Swf文件的合并播放;参见图3,在本发明实施例中,预先在Swf原型中所有新创建的动画定义标签块和放置对象标签块之后的创建显示帧标签块,利用该显示帧标签块来实现上述播放步骤。同样参照图3,为了使得合并后的Swf文件完整,在该Swf文件的最后还包括结束标签块。
下面,以第5个Swf文件的合并过程为例,对上述步骤的具体实现再加以更加具体的描述,其中,在Swf5文件中,先利用形状定义标签块(Tid=22)定义了两个物体形状,然后利用动画定义标签块(Tid=39)定义一个包含2帧子动画,接着就利用放置对象标签块(Tid=26)将所定义的动画放置到显示列表中,最后显示列表中的内容,整个Swf文件共一帧。在子动画中,先将Cid=1的对象放置到显示列表的第一层,并且显示第一帧,此时显示的内容只有Cid=1的对象;接着,将Cid=2的对象放置到显示列表的第二层,并且显示第二帧,此时显示的内容包含Cid=1和Cid=2的两个对象;以下描述为合并的具体过程首先,创建如图3所示的Swf原型,该原型表示共有N个Swf文件需要合并,其中,N表示Swf文件的个数,是自然数;通过创建该原型能够实现为包括第5个Swf文件在内的各个需要合并的Swf文件分配各自独立的显示层;然后,更新各个Swf文件中的Cid,其中,第5个Swf文件的初始内容如图1所示,假设当执行到合并第5个Swf文件时,Cid分配器中的Cid值已经分配到10,所以,第5个Swf文件中,Cid=1的形状定义标签块(Tid=22)将被更新为Cid=11;Cid=2的形状定义标签块(Tid=22)将被更新为Cid=12;Cid=3的动画定义标签块(Tid=39)将被更新为Cid=13;并且,将在其余标签块中出现的上述Cid也修改为更新后的Cid,执行完这一步骤后,第5个Swf文件的内容如图4所示;通过上述这两步,实际上实现了上述的步骤201,接下来,将图4所示更新后的第5个Swf文件中的定义标签块放置到图3所示Swf原型中的Swf5之前,并且,将图4所示更新后的第5个Swf文件中的控制标签块放置到图3所示Swf原型中的Swf5的动画定义标签块(Tid=39)中,作为该动画定义标签块的子动画标签块,实现了上述步骤202;图5示出了将第5个Swf文件合并到Swf原型中后的结果,其中,图5只示出了合并后的原型的一部分;最后,在将各个Swf文件按照与第5个Swf文件相一致的方式合并到图3所示的Swf原型中后,再利用Swf原型中的显示帧标签块在一帧中显示各层的显示内容,从而实现步骤203。合并的最终效果只显示一帧的内容,而这一帧的内容包含了N个子动画。当Swf播放器解析显示帧标签块时,此时的显示列表中将有N个二元组,每个二元组表示在第i层上显示对象标识为i的对象。这样,就达到了N个Swf文件同时显示的效果,并且,N个Swf文件的前后覆盖关系直接依赖于输入N个Swf文件的先后顺序,即第1个Swf的内容在最底层,而第N个Swf的内容在最高层。
以上所述为针对Swf作为动画文件的情况下,本发明的具体实现,依据本发明所体现的精神,也可以对其它格式的动画文件实现本发明。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种多个动画文件的合并显示方法,其特征在于,该方法包括步骤A为各个需要合并的动画文件分配独立的显示层;步骤B将各个动画文件的显示内容放置到各自所分配得到的层中;步骤C将所有层中的显示内容在一帧中按照一定的层次关系全部显示出来。
2.根据权利要求1所述的方法,其特征在于,所述动画文件为震荡波格式(Swf)文件,步骤A包括步骤A1为需要合并的动画文件分别创建子动画;步骤A2为所创建的子动画分别分配独立的显示层。
3.根据权利要求1所述的方法,其特征在于,步骤A1为按照各个Swf文件合并的先后次序,顺序为每个需要合并的Swf文件创建一个动画定义标签块,并为各个动画定义标签块分别确定一个全局唯一的对象标识;步骤A2为为每个创建的动画定义标签块分别创建一个与之对应的放置对象标签块,确定每个放置对象标签块所指明的二元数组(对象标识,层序号),其中,确定该二元数组(对象标识,层序号)中的对象标识为与该放置对象标签块相对应的动画定义标签块的对象标识,确定该二元数组(对象标识,层序号)中的层序号为一个未被其它显示对象占用的层的层序号。
4.根据权利要求3所述的方法,其特征在于,所述为各个动画定义标签块分别确定一个全局唯一的对象标识为将需要合并的Swf文件的顺序号作为为该Swf文件所创建的动画定义标签块的对象标识。
5.根据权利要求3或4所述的方法,其特征在于,所述确定该二元数组(对象标识,层序号)中的层序号为一个未被其它显示对象占用的层的层序号为将需要合并的Swf文件的顺序号作为为该Swf文件所分配的独立的层的层序号,将该层序号作为所述二元数组(对象标识,层序号)中的层序号。
6.根据权利要求1所述的方法,其特征在于,所述动画文件为Swf文件,步骤B包括步骤B0更新需要合并的动画文件的显示对象标识,以使得该显示对象标识在合并之后全局唯一;步骤B1将需要合并的Swf文件的定义标签块放置到为该文件所创建的动画定义标签块之前;步骤B2将需要合并的Swf文件的控制标签块放置到为该文件所创建的动画定义标签块之中,作为该动画定义标签块的子动画标签块;步骤B3需要合并的Swf文件利用为其所创建的放置对象标签块,将为该Swf文件所创建的动画定义标签块所定义的显示内容放置到为该Swf文件所分配的独立的显示层中。
7.根据权利要求6所述的方法,其特征在于,在步骤B0中,所述更新各个动画文件的显示对象标识为遍历需要合并的Swf文件中的每个标签块的各个对象标识,为标签块中出现与已经分配的对象标识相冲突的对象标识重新分配对象标识,并将在该Swf文件的其余标签块中出现的该对象标识也更新为重新分配后的对象标识。
8.根据权利要求6所述的方法,其特征在于,该方法进一步包括分别统计各个需要合并的Swf文件中的显示帧标签块的个数,然后分别用统计得到的个数更新对应的为Swf文件所创建的动画定义标签块中的帧数值。
9.根据权利要求6所述的方法,其特征在于,步骤B3中,所述将为该Swf文件所创建的动画定义标签块所定义的显示内容放置到为该Swf文件所分配的独立的显示层中为放置对象标签块将其所指明的二元数组(对象标识,层序号)添加到显示列表中;其中,对象标识为所述为该Swf文件所创建的动画定义标签块的对象标识,层序号为所述为该Swf文件所分配的独立的显示层的序号。
10.根据权利要求9所述的方法,其特征在于,步骤C包括显示帧标签块,根据显示列表中的各个二元数组(对象标识,层序号)的内容,在一帧中依次播放各层的显示内容。
全文摘要
本发明公开了一种多个动画文件的合并显示方法,该方法包括步骤A为各个需要合并的动画文件分配独立的显示层;步骤B将各个动画文件的显示内容放置到各自所分配得到的层中;步骤C将所有层中的显示内容在一帧中按照一定的层次关系全部显示出来。本发明能够将需要合并显示的多个动画文件实际合并到一个动画文件中,无需在合并显示过程中使用各个动画文件的存放路径,从而减少了动画文件合并显示过程中的工作量,降低了动画文件合并显示的实现难度。
文档编号G06T13/00GK1831870SQ20051005157
公开日2006年9月13日 申请日期2005年3月7日 优先权日2005年3月7日
发明者王麒 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1