使用Qt动画框架设计角色的二维动画(二)
2013-04-05 20:39
381 查看
使用Qt动画框架设计角色的二维动画(二)
接上次的日志。
上次发布demo虽然使用了大量的动画框架、有限状态机框架,但是仍有瑕疵。比如说在用户一直按下按键的时候角色会被“冻”住,但是角色的位置是移动的,这可能是使用QKeyEventTransition的一个副作用吧。在觉察到使用QKeyEventTransition不好使时,我开始着眼研究怎样将Qt按键的状态保存起来并且封装成让其余编码变得更加容易。为此我写了两篇日志。这篇日志是上篇有关按键日志的延续,也是其具体应用。
演示程序下载地址:这里
源代码下载地址:这里
代码有点儿长,我还是通过截图来讲讲实现的思路吧。
这里,我们的初音ミク可以上下左右移动,并且你一直按方向键也不会导致她被“冻”住。这是因为我首先将Qt按键的状态保存下来了,而且通过Control抽象类进行抽象,在窗口事件循环中我通过一个QTimer每隔16毫秒对场景中所有的元素进行更新,在初音ミク自身的Update()函数中负责对Control的子类DirectionControl进行更新,在DirectionConrtrol的更新代码中包含了对按键的响应。之所以选择每隔16毫秒更新一次是因为要满足60帧一秒,每帧的刷新时间只有1
/ 60 = 0.0167秒,这里去掉零头就只剩下0.016秒,即16毫秒了。
角色初音ミク的父类Character维护着一个有限状态机和两个状态:站立和行走。这两个状态之间的相互转换是不同的,正如上篇文章所说,要从站立转到行走的状态,必须满足按下按键并且此时没有进行行走的动画,但是从行走状态到站立状态则是一瞬。即一旦动画完成即进行从行走到站立动画的转换,且此时没有动画。这里详细地讲述从站立到行走状态的转换,我没有使用QKeyEventTransition类,理由如前文所示。这里我使用了另外一个转换:QSignalTransition。原理很简单,我们在DirectionControl里判断按键以及触发的条件成功后emit一个信号到QSignalTransition就可以成功地触发从站立到行走状态的转换了。
听起来有点虚,看来还是需要通过代码才能领悟啊。那么如果你希望了解更多,这里有程序的源代码,可以下载运行。我的开发环境是:
Windows: WindowsXP(SP3) + MinGW4.4/MinGW4.7 + Qt4.8.3/Qt5.0.1 + QtCreator2.6/QtCreator2.7
Linux: Ubuntu12.10 + gcc4.7 + Qt4.8.1/Qt4.8.4/Qt5.0.1 + QtCreator2.6/QtCreator2.7
接上次的日志。
上次发布demo虽然使用了大量的动画框架、有限状态机框架,但是仍有瑕疵。比如说在用户一直按下按键的时候角色会被“冻”住,但是角色的位置是移动的,这可能是使用QKeyEventTransition的一个副作用吧。在觉察到使用QKeyEventTransition不好使时,我开始着眼研究怎样将Qt按键的状态保存起来并且封装成让其余编码变得更加容易。为此我写了两篇日志。这篇日志是上篇有关按键日志的延续,也是其具体应用。
演示程序下载地址:这里
源代码下载地址:这里
代码有点儿长,我还是通过截图来讲讲实现的思路吧。
这里,我们的初音ミク可以上下左右移动,并且你一直按方向键也不会导致她被“冻”住。这是因为我首先将Qt按键的状态保存下来了,而且通过Control抽象类进行抽象,在窗口事件循环中我通过一个QTimer每隔16毫秒对场景中所有的元素进行更新,在初音ミク自身的Update()函数中负责对Control的子类DirectionControl进行更新,在DirectionConrtrol的更新代码中包含了对按键的响应。之所以选择每隔16毫秒更新一次是因为要满足60帧一秒,每帧的刷新时间只有1
/ 60 = 0.0167秒,这里去掉零头就只剩下0.016秒,即16毫秒了。
角色初音ミク的父类Character维护着一个有限状态机和两个状态:站立和行走。这两个状态之间的相互转换是不同的,正如上篇文章所说,要从站立转到行走的状态,必须满足按下按键并且此时没有进行行走的动画,但是从行走状态到站立状态则是一瞬。即一旦动画完成即进行从行走到站立动画的转换,且此时没有动画。这里详细地讲述从站立到行走状态的转换,我没有使用QKeyEventTransition类,理由如前文所示。这里我使用了另外一个转换:QSignalTransition。原理很简单,我们在DirectionControl里判断按键以及触发的条件成功后emit一个信号到QSignalTransition就可以成功地触发从站立到行走状态的转换了。
听起来有点虚,看来还是需要通过代码才能领悟啊。那么如果你希望了解更多,这里有程序的源代码,可以下载运行。我的开发环境是:
Windows: WindowsXP(SP3) + MinGW4.4/MinGW4.7 + Qt4.8.3/Qt5.0.1 + QtCreator2.6/QtCreator2.7
Linux: Ubuntu12.10 + gcc4.7 + Qt4.8.1/Qt4.8.4/Qt5.0.1 + QtCreator2.6/QtCreator2.7
相关文章推荐
- 使用Qt动画框架设计角色的二维动画(二)
- 使用Qt动画框架设计角色的二维动画
- 用Qt动画框架设计飞入-消失特效
- Qt动画框架设计飞入-消失特效
- 设计模式学习(十四)————抽象工厂模式(使用Qt框架的反射技术——根据字符串动态创建类来实现)
- android游戏开发框架libgdx的使用(二十三)—使用Universal Tween Engine实现动画效果
- 软件分层架构下的另类设计框架-工厂模式的使用
- 设计一个类能够使用ACE的各种框架
- 高仿新浪微博iOS项目实战(数据库建模、UI设计、动画优化、性能优化、控件使用)
- QT的动画框架 概述
- 在QT和SDL搭建的框架中使用OPENGL在SDL窗口上进行绘图
- Qt之动画框架
- Qt中使用QSS设计风格
- 【自然框架】之通用权限:数据库设计的几种使用方式
- app UI自动化框架改进----使用pa设计模式抽离页面元素
- (zz)actors角色模型系列之一 actors介绍以及akka 框架的使用入门
- FaceBook pop 动画开源框架使用教程说明
- 【自然框架】之通用权限:数据库设计的几种使用方式
- 各开源框架使用与设计总结 - 混混人生
- 学习日记(一):Qt 动画框架初识