Qt移动应用开发(三):使用精灵图片实现帧动画

上一篇博文讲到了Qt Quick对于动画的一般支持。动画的形式多样,配合不同的插值函数,能够差点儿实现全部想要的动画效果,而对于游戏的一些特殊的效果比方说帧动画,Qt更是有专门的类来实现。以下我们就来看看Qt Quick中到底是对帧动画是怎样实现的吧。

原创文章。反对未声明的引用。

原博客地址:http://blog.csdn.net/gamesdev/article/details/33743527

一般2D的游戏引擎都将帧动画作为一项非常重要的功能特性加以宣传,比方说cocos2d-x也有非常强大的帧动画效果,其实,一个良好的设计能够让帧动画有无限的变种形式,从而给设计人员无限的灵感空间。Qt Quick的帧动画做得非常完好。不仅能够单独渲染成动画的形式,并且能够和粒子系统相搭配,获得更炫的样例效果。

其实帧动画为了节省显存的空间,通常会採用一张大图的形式来保存一个角色的所帧信息。以下两个样例就是帧动绘图片:

帧动画的实现通常须要状态机系统的辅助。由于除了解析这张大图的任务外,为角色的每一个动作赋予对应的状态也是帧动画的重要任务。所以一款游戏会将角色的某个动作的不同帧作为一组来分类播放。最后形成角色的行为动作。这是Qt自带的样例bear whack的截图:

以下我就使用一个实例来向大家介绍一下Qt怎样使用Sprite和SpriteSequence来实现帧动画的。

import QtQuick 2.2
import QtQuick.Controls 1.1 ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Sprite測试") menuBar: MenuBar {
Menu {
title: qsTr("文件")
MenuItem {
text: qsTr("退出")
onTriggered: Qt.quit( );
}
}
} SpriteSequence
{
id: spriteSequence
anchors.centerIn: parent
width: 256
height: 256
interpolate: false
running: true
sprites:
[
Sprite
{
name: "floating"
source: "Bear1.png"
frameCount: 9
frameWidth: 256
frameHeight: 256
frameDuration: 80
}
]
} Text
{
anchors.top: spriteSequence.bottom
anchors.horizontalCenter: spriteSequence.horizontalCenter
text: qsTr("本例用来測试Sprite的使用情况。 ")
}
}

我们直接将Qt样例中的小熊帧动画拿过来了。以下是程序的截图:

SpriteSequence类的作用是为帧动画提供一个显示的容器,而且控制Sprite的执行情况。而Sprite呢,则类似于一个动作组,它能够指定角色的动作由哪些帧组成。上面的样例是通过使用frameCount、frameWidth、frameHeight和frameDuration来达到目的。

Sprite的容器能够不是SpriteSequence,比方说将帧动画应用在粒子系统上就须要ImageParticle作为Sprite的容器了。比方说Qt自带的样例bear whack就使用了类似的手法。

除了上面的方法外,另一种将SpriteSequence和Sprite结合起来的更加简单的方法来指定动画,那就是AnimateSprite。还是上面的样例。我们这样改写:

AnimatedSprite
{
id: animatedSprite
anchors.centerIn: parent
width: 256
height: 256
frameCount: 9
frameWidth: 256
frameHeight: 256
frameDuration: 80
interpolate: false
source: "Bear1.png"
}

效果和上面一样,并且语法更加简单。事实上正是Qt去掉了自己定义transition(过渡)的效果而推出的一个简单类。很适合仅仅有单个动作的角色。大多数情况下我们使用它就足够了。

在我制作的游戏《吃药了》中,我也受益于AnimatedSprite类,事实上在时间紧迫的情况下,我仅仅绘制出了两帧:

于是在AnimatedSprite的帮助下,实现细菌的帧动画就变得很easy:


// 细菌
import QtQuick 2.2
import "GameController.js" as Controller Block
{
id: bacterium
type: Controller.TYPE_BACTERIUM
property alias source: sprite.source AnimatedSprite
{
id: sprite
width: parent.width
height: parent.height frameWidth: 128
frameHeight: 128
frameCount: 2
frameRate: 2
running: true
} function setSource( color )
{
var imageResources = ["bacterium-red.png",
"bacterium-yellow.png",
"bacterium-blue.png"];
source = "../../images/" + imageResources[color];
} function setInvisible( )
{
sprite.visible = false;
}
}

articleid=33743527">本文參加了CSDN博文大赛。请大家支持我。为我投一票!

Qt移动应用开发(三):使用精灵图片实现帧动画的更多相关文章

  1. Android开发三种第三方图片加载的框架

    最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...

  2. Qt计算器开发(三):执行效果及项目总结

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/guodongxiaren/article/details/26046543 执行效果 project ...

  3. 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计

    这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...

  4. (三)Sass和Compass--制作精灵图片

    6.1 精灵的工作原理 // 将各种图片合并到一张图片里面,并在不同的状态下改变背景图片的位置; 6.2 精灵的重要性 // 压缩图片的内存; // 减少HTTP请求 6.2.3 Compass处理精 ...

  5. 基于Spring MVC的Web应用开发(三) - Resources

    基于Spring MVC的Web应用开发(3) - Resources 上一篇介绍了在基于Spring MVC的Web项目中加入日志,本文介绍Spring MVC如何处理资源文件. 注意到本项目的we ...

  6. Java Web高性能开发(三)

    今日要闻: Clarifai:可识别视频中物体 最近几年,得益于深度学习技术的发展,谷歌和Facebook等企业的研究人员在图形识别软件领域取得了重大突破.现在,一家名为Clarifai的创业公司则提 ...

  7. Qt For Android 开发环境配置

    想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt ...

  8. 【Qt编程】基于Qt的词典开发系列<六>--界面美化设计

    本文讲一讲界面设计,作品要面向用户,界面设计的好坏直接影响到用户的体验.现在的窗口设计基本都是扁平化的,你可以从window XP与window 8的窗口可以明显感觉出来.当然除了窗口本身的效果,窗口 ...

  9. 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示

    去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...

随机推荐

  1. Mysql建表语句

    create table messages( id int unsigned primary key auto_increment, sender varchar(64) not null, gett ...

  2. sql server中扩展存储过程

    --列出服务器上安装的所有OLEDB提供的程序 execute master..xp_enum_oledb_providers --得到硬盘文件信息 --参数说明:目录名,目录深度,是否显示文件 (少 ...

  3. Python爬虫之HDU提交数据

    前一篇http://www.cnblogs.com/liyinggang/p/6094338.html 使用了爬虫爬取hdu 的代码,今天实现了将数据向hdu 提交的功能,接下来就是需要将两个功能合并 ...

  4. Visual Studio 2013百度云下载地址

    Visual Studio 2013百度云下载地址: 链接: https://pan.baidu.com/s/1JkVYLnFo2TWSu4dkDdZP3Q  提取码: 关注公众号[获取   winf ...

  5. CCF CSP 201612-2 工资计算

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201612-2 工资计算 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所 ...

  6. USACO 5.3 Big Barn

    Big BarnA Special Treat Farmer John wants to place a big square barn on his square farm. He hates to ...

  7. python的简介(一)

    1. Python的种类 Cpython     Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚 ...

  8. 003 Ajax中传输格式为XML

    一: 1.优缺点 二:大纲 1.结构设计 三:程序 1.xml <?xml version="1.0" encoding="utf-8"?> < ...

  9. thinphp中volist嵌套循环时变量$i 被污染问题,key="k"

    默认是$i,但是嵌套循环是使用$i,默认的变量$i就会被污染.可以自定义设置变量key="k" k任意. 用 key="k" 代替默认的 $i 1 2 3 4 ...

  10. CSUOJ 1217 奇数个的那个数 位运算

    Description 给定些数字,这些数中只有一个数出现了奇数次,找出这个数. Input 每组数据第一行n表示数字个数,1 <= n <= 2 ^ 18 且 n % 2 == 1. 接 ...