热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CitrusEngine系列教程四:Citrus的2D动画和摄像头

2019独角兽企业重金招聘Python工程师标准作者:cls分享站CitrusEngine系列教程一:认识CitrusEngineCitrusEn

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

作者:cls分享站

 

  1. CitrusEngine系列教程一:认识CitrusEngine

  2. CitrusEngine系列教程二:结合starling和Box2D开发游戏

  3. CitrusEngine系列教程三:使用flash cs 设计关卡

  4. CitrusEngine系列教程四:Citrus的2D动画和摄像头

  5. CitrusEngine系列教程五:使用PhysicsEditor创建box2d刚体

  6. CitrusEngine系列教程六:使用Tiled Map Editor创建地图

 

............................................................................


这次我们讨论一下CitrusEngine的2D动画和摄像头。关于动画,基本上支持Starling的 都可以在CitrusEngine使用,不过CitrusEngine简化了操作步骤而已.这里我将介绍三种方式来创建Citrus的2D动画

  • 使用swf动画

  • 用Sprite Sheet的位图序列来构建动画

  • 通过龙骨(Dragon Bones )创建骨骼动画(=》官方中文教程)

在开始之前,我们同样先用 Components.fla来为我们的关卡设置布局,其实也是在设置box2d的刚体位置与范围(这次我命名为Level2.fla),不过这次为了让摄像头有用武之地,我们将场景设大点(1500 * 768):
灰色是平台(Platform),黄色是钱币(coin),蓝色是英雄(hero),红色是敌人(Enemy) 


 

这里我们先给Enemy设置默认的活动范围(敌人默认会在leftBound, rightBound设置的范围内来回走动直到遇到障碍物返回,如Platform)


 

现在我们来开始会角色创建动画:
1.使用swf动画这个是最简单的动画创建方案,做法就是将swf作为游戏元素的view。如我们可以这样给coin设置动画
1)创建coin.fla,创建一个影片剪辑元件coin_anim,做一个简单的帧动画




2)将元件拉入舞台,并将其大小设置为50*50,这个是为了与Level2.fla设置的coin大小一致。至于其他的,如坐标和coin.fla的舞台大小和背景色等无关紧要,可以随意设置
3)最后在Level2.fla中coin的view上填写coin.swf的路径,谨记路径是相对于flex项目。呵,是不是与上一篇教程设置英雄的view的时候一模一样~




2.使用Sprite Sheet的位图序列来构建动画在Starling中一般使用Sprite Sheet的位图序列来构建动画,其实在我的系列教程二中正是使用这个方法给英雄添加动画的,不过那个时候我没有讲如果通过flash cs创建位图和xml。现在我们来看看怎么通过 flash cs 来给我们的英雄(hero)创建Sprite Sheet的位图。
a.首先,我们需要知道hero有以下几种动画:走路(walk),死亡(die),跳跃(jump),受伤(hurt),闲置(idle),闪避(duck)等,而我们需要做的是 为这些动画创建相应的影片剪辑将其作为库元件,当然我们可以根据需要之创建必要的动画,如本教程只创建了walk,idle,jump。以下库元件jump(跳跃)的截图:




注意:需要新建一层在第一帧标记一个“jump”的标签。
b.创建相关动画后,我们可以在库文件选中并右键导出Sprite Sheet


 

以下是我导出时候的参数设置:


 

这样子我们就得到了一张Sprite Sheet的位图序列和xml文件,接下来我们可以通过Embed嵌入使用:



那么接下来使用方法和系列教程二一样
  1. [Embed(source="../../levels/hero.png")]

  2. private var heroAnimBitmap:Class;

  3. [Embed(source="/../levels/hero.xml",mimeType="application/octet-stream")]

  4. private var heroAnimXML:Class;


  5. var ta:TextureAtlas=new TextureAtlas(

  6. Texture.fromBitmap(new heroAnimBitmap()),XML(new heroAnimXML()));

  7. var animationSeq:AnimationSequence=new AnimationSequence(ta,

  8. ["walk","idle","jump"],"idle",24);

  9. hero.view=animationSeq;

3.通过龙骨(Dragon Bones )创建骨骼动画(=》官方中文教程)DragonBones是一套开源的 2D骨骼动画框架和工具,它包含了基于Flash Pro的骨骼动画编辑面板DragonBonesDesignPanel及骨骼动画ActionScript框架。它可以让开发者运用熟悉的Flash Pro元件及时间轴编辑方式,快速创建2D骨骼动画,并运用到Flash或其他技术的应用中。Features
  • 动画基于Flash pro时间轴,可以使用Flash传统动画方式制作游戏动画;

  • 骨骼绑定可以让动画更精准,更真实自然,并可通过程序动态控制;

  • 可设置单个骨骼的动画时间缩放和延时播放,使用较少的关键帧就可以表现复杂生动的动画效果;

  • 动画各部分采用拼接方式,动画有缓动补间,占用位图/内存资源少;

  • 骨骼显示对象与骨骼的逻辑分离,可在不影响动画播放的情况下动态更换;

  • 能方便用于传统DisplayList、Starling及其他技术的2D应用。

首先我们需要下载龙骨并安装Flash Pro扩展插件。需要注意的是这个插件只支持Flash Pro 5.5或以上版本。安装方法:打开flash cs-》帮助=》管理扩展=》安装=》选择下载包中的“DragonBonesDesignPanel.zxp”进行安装安装完成之后,我们可以通过 窗口>其他面板>DragonBonesDesignPanel打开骨骼动画编辑面板。现在我们需要将我们刚刚的三个元件动画合并成一个(我将其命名为“allAnimations”),当然我们还是要用标签来区分它们。(这个时候不需要补间动画,你可以选择删除补间或者保留,事情上使用龙骨时我们只需要设置关键帧并排好对应位置就行了)


然后我们在库中选中这个元件(allAnimations),打开骨骼编辑面板》导入》导入选中库元件:

这个时候你可以通过Bone Tree(骨骼树)等设置骨骼的从属关系等内容使动画更流畅,也可以直接将其导出,导出的时候我们选择“png(包含xml)”。最后我们得到一张包含xml信息的png图片


最后在flex中使用龙骨动画:

  1. [Embed(source="../../levels/hero_output.png",mimeType="application/octet-stream")]

  2. private var heroAnimBitmapAndXML:Class;


  3. /*Armature: 我们可以把它想像为一个容器,它对应在Flash Pro中编辑并通过骨骼面板导出的一个MoiveClip。

  4. 通过Armature来对各骨骼进行管理,播放动画等。*/

  5. var armature:Armature;

  6. /*基于Starling的Factory,这是构建骨骼动画的基础。它负责从前面骨骼面板导出的资源中解析数据格式

  7. 和准备图像资源,并且通过它创建骨骼容器Armature。*/

  8. var factory:StarlingFactory=new StarlingFactory();

  9. factory.addEventListener(Event.COMPLETE,function(event:Event):void{

  10. armature=factory.buildArmature("allAnimations");

  11. armature.animation.timeScale=0.7;

  12. hero.view=armature;

  13. hero.offsetX = 35;

  14. hero.offsetY = 35;

  15. });

  16. factory.parseData(new heroAnimBitmapAndXML());

最后我们来看一下如何设置摄像头:CitrusEngine中,我们可以通过view.camera对摄像头进行访问,通过其setUp(target:Object=null,offset:MathVector=null, bounds:Rectangle=null,
easing:MathVector=null, cameraLens:MathVector=null):ACitrusCamera快速的设置摄像头的相关属性。以下是对该方法参数的介绍:
  • target:摄像头的目标,如将其设置为hero,摄像头将随着hero的运动而运动

  • offset:设置目标运动时候,目标左上角的区域,如将其设为MathVector(0,0)且如果你的场景足够大,你会发现你的目标运动的时候左边没有空余的距离,即你向右跑的话,你看不到你身后的物体,除非你右边显示区域已经没有已经到头~

  • bounds:相机显示区域,这个教程我们设置为Level2.swf的大小

  • easing:在x和y上摄像头跟随目标变化的速率,数值越小变化越慢,最大不能超过1,当设置为0,摄像头不会移动

用法示例:
  1. var offset:MathVector = new MathVector(stage.stageWidth/2,stage.stageHeight/2);

  2. var bounds:Rectangle = new Rectangle(0, 0, 1500, 768);

  3. var easing:MathVector = new MathVector(0.25, 0.25);

  4. view.camera.setUp(hero, offset, bounds, easing);

=》原文及源码下载


转:https://my.oschina.net/clschen/blog/129878



推荐阅读
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
author-avatar
Gemini强强Gemini
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有