最近开始用cantk做些复杂的游戏,其中一个游戏的DragonBones骨骼动画的JSON文件就达600K,导出之后显示各种不正常,可能是太复杂了,有些方面达到了DragonBones的极限。拿到官方的补丁仍然还有些问题,不爽的是新版本有一万多行代码,是老版本的三倍之多。据说骨骼动画Spine做得更好,而且Spine.js只有两千多行代码,决定为cantk加上Spine的支持。

cantk写一个插件支持Spine是非常简单的,只要增加一个ShapeCreator就行了:

  1. function UISpineCreator() {
  2. var args = ["ui-spine", "ui-spine", null, true];
  3. ShapeCreator.apply(this, args);
  4. this.createShape = function(createReason) {
  5. var g = new UISpine();
  6. return g.initUISpine(this.type, 200, 200);
  7. }
  8. return;
  9. }
  10. ShapeFactoryGet().addShapeCreator(new UISpineCreator());

在集成过程中,下面几点比较有意思:

  • 一、使用TexturePacker打包图片。缺省例子的图片是分离的,有好几十张小图片,这并非好的做法。我决定像DragonBones一样把它们打包成一张大图。Spine.js写得非常好,这个改动很轻松:
  1. var rootPath = this.textureJsonURL +'#';
  2. var json = new spine.SkeletonJson({
  3. newRegionAttachment: function (skin, name, path) {
  4. var src = rootPath + path + ".png";
  5. var attachment = new spine.RegionAttachment(name);
  6. attachment.rendererObject = WImage.create(src);
  7. return attachment;
  8. },
  9. newBoundingBoxAttachment: function (skin, name) {
  10. return new spine.BoundingBoxAttachment(name);
  11. }
  12. });

WImage是对HTML Image的包装,支持TexturePacker打包的图片和几种自动切图的方式。

  • 二、播放完成时的回调函数。游戏通常需要在播放一个动作之后做些处理,比如播放声音或发射武器之类的东西。官方例子里并没有这种用法,看了一下实现的代码,里面已经提供相应的机制:
  1. UISpine.prototype.gotoAndPlay = function(animationName, repeatTimes, onDone, onOneCycle) {
  2. var me = this;
  3. this.animationName = animationName;
  4. if(this.spineState) {
  5. var track = this.spineState.setAnimationByName(0, animationName, true, 0);
  6. track.repeatTimes = repeatTimes ? repeatTimes : 0xffffffff;
  7. track.onComplete = function(i, count) {
  8. this.repeatTimes--;
  9. if(this.repeatTimes <= 0) {
  10. this.loop = false;
  11. if(onOneCycle) {
  12. onOneCycle.call(me);
  13. }
  14. if(onDone) {
  15. onDone.call(me);
  16. }
  17. }
  18. else {
  19. if(onOneCycle) {
  20. onOneCycle.call(me);
  21. }
  22. }
  23. }
  24. }
  25. return this;
  26. }
  • 三. 缩放的处理。我发现只有在加载时才能指定scale,不太灵活,所以决定在绘制时自己缩放吧:
  1. var ay = this.h;
  2. var ax = this.w >> 1;
  3. var scale = this.animationScale;
  4. this.update(canvas);
  5. canvas.translate(ax, ay);
  6. canvas.scale(scale, scale);
  7. ...

参考:

CanTK: https://github.com/drawapp8/cantk

Spine Runtimes: https://github.com/EsotericSoftware/spine-runtimes/

集成骨骼动画Spine的几点经验的更多相关文章

  1. Spine(2D骨骼动画)

    点击进入Spine官网 Spine 是一款针对游戏的 2D 骨骼动画编辑工具. Spine 旨在提供更高效和简洁 的工作流程,以创建游戏所需的动画. 功能: 1.摄影表 Dopesheet 在动画制作 ...

  2. HTML5骨骼动画Demo | 使用min2d、createjs、pixi播放spine动画

    Spine做骨骼动画是比较流行的,使用起来可能相对复杂,但功能毕竟强大,所以市场占有率较大. 在unity.cocos2d.starling中使用spine已经很成熟了,而HTML5这一块可能刚刚起步 ...

  3. 使用spine骨骼动画制作的libgdx游戏

    (官网:www.libgdx.cn) Super Spineboy是一个使用Spine和libgdx开发的跨平台游戏(Windows,Mac,Linux),Spine是一个2D游戏动画工具.Super ...

  4. Spine Skeleton Animation(2D骨骼动画)

    骨骼动画 首先我们来看到底什么是骨骼动画: 在早期的机器上,渲染本身已经占用了很多CPU资源,因此,对于渲染,往往采取的是一种空间换时间的策略,以避免在模型的渲染中继续加重CPU的负担.帧动画模型在这 ...

  5. 初尝2D骨骼动画编辑工具SPINE,并into Unity3D

    一.SPINE使用 研究2D骨骼动画,CYou的朋友介绍我SPINE这个工具,开发自Esoteric Software的一款专门制作2D动画的软件,网络上的资料还很少,我这从半吊子美术技术的角度简单说 ...

  6. spine骨骼动画组件使用详解

    1. spine骨骼动画工具 骨骼动画: 把动画打散, 通过工具,调骨骼的运动等来形成动画spine是一个非常流行的2D骨骼动画制作工具spine 动画美术人员导出3个文件:    (1) .png文 ...

  7. cocos2dx 使用spine制作骨骼动画

    刚刚接触骨骼动画,所以写一篇文章记录. 1.首先先画好人物的每一个部件: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fon ...

  8. 记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]

    1:准备好unity使用Spine所需要的运行库,可到如下地址 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine ...

  9. 如何给spine骨骼动画挂载粒子特效

    目的是要把粒子挂载到骨骼动画的某个一个部件上,其实最主要是找对位置. 预览效果,左手红火,右手蓝火,很炫吧:) //init bool HelloWorld::init() { /////////// ...

随机推荐

  1. WPF中两个窗口的互斥

    这里所讲的互斥是两个窗口不同时存在,打开一,只显示一:点一相关按钮显示二,关闭一:关闭二,显示一. 窗口一: history winResult winChoice = new winResult() ...

  2. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...

  3. HTML基础 整理

    HTML:超文本传输协议 (Hyper Markup Language) CSS:网页美化 (Cascading Style Sheets) JS:java-scipt 脚本语言 Dreamweave ...

  4. Dungeon Master bfs

    time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u POJ 2251 Descriptio ...

  5. MeshLab中进行点云配准

    MeshLab是一个开源.可移植和可扩展的三维几何处理系统,主要用于交互处理和非结构化编辑三维三角形网格.它支持多种文件格式: import:PLY, STL, OFF, OBJ, 3DS, COLL ...

  6. 使用spring过程中遇到的问题

    1.java.lang.SecurityException: sealing violation: package javax.servlet is sealed java.lang.Security ...

  7. Spring环境的搭建与测试 (spring2.5.6)

    这里是采用的视频里面的spring版本 下载spring2.5.6, 然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下 dist\spring.jar lib\jakarta-commo ...

  8. VS2013常用快捷方式

    [原文出处]http://blog.csdn.net/lushuner/article/details/23688629 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合 ...

  9. HDU-4521 小明系列问题——小明序列 间隔限制最长上升子序列

    题意:给定一个长度为N的序列,现在要求给出一个最长的序列满足序列中的元素严格上升并且相邻两个数字的下标间隔要严格大于d. 分析: 1.线段树 由于给定的元素的取值范围为0-10^5,因此维护一棵线段树 ...

  10. 缓存技术之——Yii2性能优化之:缓存依赖

    Yii中的缓存依赖,简单来说就是将缓存和另外一个东西绑定在一起,如果另外一个东西发生变化,那么缓存也将发生变化.有点儿类似于JS中的触发事件(但是也不那么像),缓存的变动是依赖的东西所导致的. 依赖可 ...