使用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
分享到:
相关推荐
最近我花了大概三、四天的时间研究Qt动画框架的内容,这让我感到Qt人员精心的设计给了我们一套非常规范并且易懂的代码,如果另外的一名开发者也对Qt动画框架有所了解,那么他可以毫不费力地看懂我的代码,并且从代码...
最近我花了大概三、四天的时间研究Qt动画框架的内容,这让我感到Qt人员精心的设计给了我们一套非常规范并且易懂的代码,如果另外的一名开发者也对Qt动画框架有所了解,那么他可以毫不费力地看懂我的代码,并且从代码...
上次发布demo虽然使用了大量的动画框架、有限状态机框架,但是仍有瑕疵。比如说在用户一直按下按键的时候角色会被“冻”住,但是角色的位置是移动的,这可能是使用QKeyEventTransition的一个副作用吧。在觉察到使用...
上次发布demo虽然使用了大量的动画框架、有限状态机框架,但是仍有瑕疵。比如说在用户一直按下按键的时候角色会被“冻”住,但是角色的位置是移动的,这可能是使用QKeyEventTransition的一个副作用吧。在觉察到使用...
Qt动画框架很强大,只要你想得到,它就有可能帮你实现。这一次我将抽取上一个演示程序的部分来进行介绍。这一部分我命名为“飞入 - 消失”特效,主要用在文字的显示方面,从这点上说很像PowerPoint上面特效的一种。
在线下载Google地图 影像 矢量切片和地形晕眩图,实时显示,如果下载后编译无法通过,请项目中的文件移除后重新添加,VS2015+qt591
Qt动画框架很强大,只要你想得到,它就有可能帮你实现。这一次我将抽取上一个演示程序的部分来进行介绍。这一部分我命名为“飞入 - 消失”特效,主要用在文字的显示方面,从这点上说很像PowerPoint上面特效的一种。
qt二维绘图,使用QT绘制基本图形,包括矩形、椭圆、圆角矩形等
基于Qt的二维图像三维化代码,本人经过3个月的努力终于写出来了,现在跟大家共同分享一下
近一年,学习游戏开发遇到了瓶颈,主要是因为游戏中有很多复杂的状态要维护,以前使用的switch – ...这段时间觉得不得不学习Qt的动画框架了,因此写下这篇日志,希望能够帮得上对渴望学习游戏动画方面但是困惑的同学。
画布建立二维直角坐标系,添加一个标记在(0,0)点,可控制标记移动,可自由二次开发,压缩包内有有用法,不会的可以私聊我
基于Qt+C++实现物体二维尺寸智能检测教学软件+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于Qt+C++实现物体二维尺寸智能检测教学软件+源码,适合毕业...
qt二维OPENGL绘图源码
Qt动画框架源代码,可以自己编译或者使用:AnimUT 一个简单的Qt框架,用于使用计时器和/或线程创建动画。
QT界面编写的用C语言二维数组的矩阵乘法程序
在Qt(5.5.1)中,利用qwt(6.1.2)实现二维曲线的绘制,并且具有动态、实时显示,以及通过鼠标滚轮实现坐标轴以及曲线的缩放等功能(在几个同事电脑上都试过,编译全部通过)。
Qt动画框架是Kinetic项目的一部分,主要目的是提供一种简单的方法用于创建动画的和平滑的GUI。通过Qt动画属性,Qt动画框架为部件和其他QObject对象的动画操作提供了非常大的自由性。Qt动画框架也能用于图形视图框架...
可绘制多种丰富、美观的二维图表,甚至动态图表都可以绘制,需要的朋友可以下载
c使用qt框架写的界面程序,仿照360软件。。。