Qt移动应用开发(二):使用动画框架

上一篇博客介绍了怎样使用Qt的QML来对屏幕分辨率大小进行适应,其实,不同分辨率的适应是一个很棘手的问题,除了分辨率不同外,宽高比(aspect ratio)也不尽同样。

有些平板在硬件上做得和IPad一样是Retina屏(2048×1536),有些低端的手机分辨率仅仅有320×480。这样宽高比又不一样了。所以在设计App的过程一定要对内容布局有所规划。採用锚布局的方法能够帮我们解决一定的问题,同一时候也要善用Screen类的成员来获得系统分辨率的很多其它信息。

这篇文章主要介绍的是QtQuick的动画框架。

Qt Quick动画框架自从Qt4的时代就有了,当时也有非常多的demo给我们眼前一亮。

脱胎于C++的动画框架。Qt Quick的动画框架绚丽而且易用。非常值得学习。

原创文章。反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/32730079

首先介绍一下与动画框架相关的几个类:

Animation是这些类的基类。它具有这几个属性:

alwaysRunToEnd : bool
loops : int
paused : bool
running : bool

后三个属性很好理解。第一个解释一下,假设设为true,那么不管动画是否结束,他都会让动画完毕最后一轮播放。设为false,那么一旦动画结束。那么动画马上结束。

Animation有非常多子类。包含AnchorAnimation、ParallelAnimation、ParentAnimation、PathAnimation、PauseAnimation、PropertyAction、PropertyAnimation、ScriptAction、和 SequentialAnimation。我们在实际应用中。一般单个动画会使用PropertyAnimation的子类ColorAnimation、NumberAnimation、RotationAnimation和Vector3dAnimation,以下是一个简单的样例:

NumberAnimation on x { from: 0;to: 100; duration: 1000 }

如上面样例所看到的,PropertyAnimation以下的子类灵活多样。有多种语法存在形式,经常和介词on以及短语Behavior on连用。上面的样例表示介词on左边的动画类型一定要和右边的属性类型相应。假设要对一个vector3d的变量应用介词on。那么应该这么写:

Vector3dAnimation on position { from: Qt.vector3d( 0, 0, 0 ); to Qt.vector3d( 1, 1, 1 ); duration: 1000 }

Behavior on和on的差别在于Behavioron是提供了默认的动画操作。即Behavior里面能够描写叙述默认的动画:

Behavior on width
{
NumberAnimation { duration: 1000 }
}

但可能是Qt Quick动画这一块不完好吧,有的时候在不同的平台上表现会有所不同,有时Behavior不工作。有时却又是好的(问题描写叙述)。

当Behavior遇到了状态转换(transition)时,Behavior会被覆盖。详情请參阅Qt的相关文档。

大家看到我制作的游戏三个细菌和胶囊是一直从左往右移动的,而且是循环的,这里展示一下代码:

Image
{
id:animateCapsule
height:parent.width / 10
width:height / 2
propertyint xFrom: parent.width + height * 8
propertyint xTo: -height * 2
x:xFrom
y:parent.height * 0.45
source:"../../images/capsule.png" RotationAnimation on rotation
{
from:0
to:360
loops:Animation.Infinite
duration:2000
} //@桌面:请注意使用这一段代码
Behavioron x
{
NumberAnimation
{
from:animateCapsule.xFrom
to:animateCapsule.xTo
loops:Animation.Infinite
duration:2000
}
}
}

本文參加了CSDN博文大赛。请大家支持我,为我投一票!

最新文章

  1. 一切都是对象 Thinking in Java 第二章
  2. ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER004_同步显示歌词
  3. Jquery常用功能
  4. sqlite3 C接口
  5. Windows7下MySQL5.6.15免安装版的配置(来自yang362046076)
  6. C++ 面向对象学习2 构造方法
  7. Ubuntu下Git的使用之创建版本库
  8. 利用jackson转成json字符串(ssh中)
  9. 为什么在有的服务器上禅道、蝉知安装会报错? 之理解MySQL的SQL_MODE
  10. xBIM 日志操作
  11. k-均值聚类算法1
  12. MySQL 栏位修改为区分大小写
  13. ThinkPHP 数据库操作(三) : 查询方法、查询语法、链式操作
  14. Elasticsearch 通关教程(二): 索引映射Mapping问题
  15. 题解-bzoj4221 JOI2012kangaroo
  16. 对python的super方法的用法理解
  17. mybatis隐藏不用的sql
  18. (stripTrailingZeros)A == B hdu2054
  19. GNU make使用(一)
  20. T-SQL的timestamp类型实际应用

热门文章

  1. jQuery学习笔记(1)-初探
  2. opencv3.3+vs2015调用笔记本摄像头成功
  3. 内存溢出及Jvm监控工具
  4. Android 网络图片查看器与网页源码查看器
  5. swift- mutating
  6. python游戏开发:pygame事件与设备轮询
  7. 网站卡测试用 PageSpeed Insights
  8. Mybatis学习总结一
  9. Spring框架系列(四)--IOC控制反转和DI依赖注入
  10. RabbitMQ系列(六)--面试官问为什么要使用MQ,应该怎么回答