qt做动画,qt3d模型动画
拿起最后一个。
日志。
虽然在上一个demo版本中使用了大量的动画框架和有限状态机框架,但是仍然存在一些缺陷。比如当用户一直按着键的时候,角色会被“冻结”,但是角色的位置会移动,这可能是使用QKeyEventTransition的副作用。当我意识到QKeyEventTransition并不好用的时候,我开始研究如何保存Qt key的状态,并将其打包,使剩下的编码变得更容易。为此我写了两篇日志。这个日志是上一个关于按键的日志的延续,也是它的具体应用。
演示程序的下载地址:这里
下载源代码地址:这里
代码有点长,还是通过截图说说实现的思路吧。
在这里,我们的初音未来可以上下左右移动,如果你一直按箭头键,她不会被冻结。这是因为我先保存了Qt key的状态,通过Control的抽象类进行了抽象。在窗口事件周期中,我通过一个QTimer每16ms更新一次场景中的所有元素。初音未来自己的update()函数中,我负责更新DirectionControl,Control的一个子类,DirectionControl的更新代码中包含了对键的响应。我之所以选择每16毫秒更新一次,是因为要满足每秒60帧的要求,每帧的刷新时间只有1/60=0.0167秒。这里去掉分数,只剩下0.016秒,也就是16毫秒。
初音未来的母体Character维持着一个有限状态机和两种状态:站立和行走。这两种状态之间的相互转化是不同的。就像上一篇文章说的,要从站着变成走着,必须满足这个时候按下键不走的动画,但是从走着变成站着就是一瞬间。即动画一旦完成,就进行从行走动画到站立动画的过渡,此时没有动画。这里,详细描述从站立到行走状态的转变。我没有使用QKeyEventTransition类,原因如上所示。我在这里使用了另一个转换:QSignalTransition。原理很简单。我们可以在判断DirectionControl中的按键和触发条件后,通过一个从emit到QSignalTransition的信号成功触发从站立到行走的转换。
听起来有点空洞,但似乎还是需要代码才能理解。那么如果你想了解更多,这里是程序的源代码,可以下载运行。我的开发环境是:
windows:windows XP(SP3)mingw 4.4/mingw 4.7 Qt 4 . 8 . 3/Qt 5 . 0 . 1 qtcreator 2.6/qtcreator 2.7
Linux:Ubuntu 12.10 gcc 4.7 Qt 4 . 8 . 1/Qt 4 . 8 . 4/Qt 5 . 0 . 1 Qt creator 2.6/Qt creator 2.7
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。