2012.1.21 CEGUI 动画系统、ChainedXMLHandler、xsd文件

本文探讨了CEGUI库的动画系统,虽然基于字符串的属性系统可能导致效率问题,但其设计优雅,支持对所有属性的动画控制。动画定义与实例分离,通过线性插值实现关键帧间的平滑过渡。此外,介绍了ChainedXMLHandler,它是处理XML文件的一种非递归方法,可能在效率上逊于递归,但在编写上更为简洁。最后提到了xsd文件的作用,用于验证XML文件的结构。作者意识到深入剖析代码的重要性,并计划使用UML图进行更清晰的表述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.CEGUI的属性系统非常方便非常强大,只需向PropertySet::setProperty函数中传人属性名和属性值,就可以设置了。方便的代价是效率,无论何种类型的属性值都是以字符串的形式传人的,在调用真正的属性设置函数进行设置时,再把字符串转化为真正的类型值。如果只是在初始化时,或者界面响应用户操作时,以这种形式进行设置,那也没什么大不了,但如果是在每帧里面都这样设,我感觉效率上有点吃不消。

CEGUI的动画系统就是基于它的属性系统的,所以动画系统可以动画所有属性,这一点非常强大,但就像上面说的,因为属性系统是基于字符串的,而动画每帧都要设置属性,这个效率,我表示怀疑。

不过动画系统设计的还是非常好的,代码很有美感。设计的总体思路除了上面说的以属性为基础外,还有就是动画的定义和动画实例分离。

动画的定义记录静态信息:该动画操控那些属性,每种操控的关键帧的时间位置是什么、值是什么。动画的实例记录动态信息,其实就是一个:该实例播放到什么时间点了。

在每一帧绘制的时候,将流失的时间传人动画实例中,计算当前播到什么时间点了,然后再把时间点传人动画定义中,找到时间点两边的关键帧,进行线性插值,获取该时间点对应的属性值,然后设置该属性就可以了。有些关键帧的值被设置为某些属性的值,动画开始时,会把这些关键帧值刷一遍,以同步到当时的那些属性的值,这些值也记录在动画实例中。

具体的动画系统还有很多小细节,想下次画一下UML图,详细的剖析一下,不过我现在有时想,这样详细研究剖析代码的收益和付出到底是否划得来。


2.Chaine

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值