集成骨骼动画Spine的几点经验
最近开始用cantk做些复杂的游戏,其中一个游戏的DragonBones骨骼动画的JSON文件就达600K,导出之后显示各种不正常,可能是太复杂了,有些方面达到了DragonBones的极限。拿到官方的补丁仍然还有些问题,不爽的是新版本有一万多行代码,是老版本的三倍之多。据说骨骼动画Spine做得更好,而且Spine.js只有两千多行代码,决定为cantk加上Spine的支持。
为cantk写一个插件支持Spine是非常简单的,只要增加一个ShapeCreator就行了:
function UISpineCreator() {
var args = ["ui-spine", "ui-spine", null, true];
ShapeCreator.apply(this, args);
this.createShape = function(createReason) {
var g = new UISpine();
return g.initUISpine(this.type, 200, 200);
}
return;
}
ShapeFactoryGet().addShapeCreator(new UISpineCreator());
在集成过程中,下面几点比较有意思:
- 一、使用TexturePacker打包图片。缺省例子的图片是分离的,有好几十张小图片,这并非好的做法。我决定像DragonBones一样把它们打包成一张大图。Spine.js写得非常好,这个改动很轻松:
var rootPath = this.textureJsonURL +'#';
var json = new spine.SkeletonJson({
newRegionAttachment: function (skin, name, path) {
var src = rootPath + path + ".png";
var attachment = new spine.RegionAttachment(name);
attachment.rendererObject = WImage.create(src);
return attachment;
},
newBoundingBoxAttachment: function (skin, name) {
return new spine.BoundingBoxAttachment(name);
}
});
WImage是对HTML Image的包装,支持TexturePacker打包的图片和几种自动切图的方式。
- 二、播放完成时的回调函数。游戏通常需要在播放一个动作之后做些处理,比如播放声音或发射武器之类的东西。官方例子里并没有这种用法,看了一下实现的代码,里面已经提供相应的机制:
UISpine.prototype.gotoAndPlay = function(animationName, repeatTimes, onDone, onOneCycle) {
var me = this;
this.animationName = animationName;
if(this.spineState) {
var track = this.spineState.setAnimationByName(0, animationName, true, 0);
track.repeatTimes = repeatTimes ? repeatTimes : 0xffffffff;
track.onComplete = function(i, count) {
this.repeatTimes--;
if(this.repeatTimes <= 0) {
this.loop = false;
if(onOneCycle) {
onOneCycle.call(me);
}
if(onDone) {
onDone.call(me);
}
}
else {
if(onOneCycle) {
onOneCycle.call(me);
}
}
}
}
return this;
}
- 三. 缩放的处理。我发现只有在加载时才能指定scale,不太灵活,所以决定在绘制时自己缩放吧:
var ay = this.h;
var ax = this.w >> 1;
var scale = this.animationScale;
this.update(canvas);
canvas.translate(ax, ay);
canvas.scale(scale, scale);
...
参考:
CanTK: https://github.com/drawapp8/cantk
Spine Runtimes: https://github.com/EsotericSoftware/spine-runtimes/
集成骨骼动画Spine的几点经验的更多相关文章
- Spine(2D骨骼动画)
点击进入Spine官网 Spine 是一款针对游戏的 2D 骨骼动画编辑工具. Spine 旨在提供更高效和简洁 的工作流程,以创建游戏所需的动画. 功能: 1.摄影表 Dopesheet 在动画制作 ...
- HTML5骨骼动画Demo | 使用min2d、createjs、pixi播放spine动画
Spine做骨骼动画是比较流行的,使用起来可能相对复杂,但功能毕竟强大,所以市场占有率较大. 在unity.cocos2d.starling中使用spine已经很成熟了,而HTML5这一块可能刚刚起步 ...
- 使用spine骨骼动画制作的libgdx游戏
(官网:www.libgdx.cn) Super Spineboy是一个使用Spine和libgdx开发的跨平台游戏(Windows,Mac,Linux),Spine是一个2D游戏动画工具.Super ...
- Spine Skeleton Animation(2D骨骼动画)
骨骼动画 首先我们来看到底什么是骨骼动画: 在早期的机器上,渲染本身已经占用了很多CPU资源,因此,对于渲染,往往采取的是一种空间换时间的策略,以避免在模型的渲染中继续加重CPU的负担.帧动画模型在这 ...
- 初尝2D骨骼动画编辑工具SPINE,并into Unity3D
一.SPINE使用 研究2D骨骼动画,CYou的朋友介绍我SPINE这个工具,开发自Esoteric Software的一款专门制作2D动画的软件,网络上的资料还很少,我这从半吊子美术技术的角度简单说 ...
- spine骨骼动画组件使用详解
1. spine骨骼动画工具 骨骼动画: 把动画打散, 通过工具,调骨骼的运动等来形成动画spine是一个非常流行的2D骨骼动画制作工具spine 动画美术人员导出3个文件: (1) .png文 ...
- cocos2dx 使用spine制作骨骼动画
刚刚接触骨骼动画,所以写一篇文章记录. 1.首先先画好人物的每一个部件: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fon ...
- 记录 Spine骨骼动画导入unity 步骤[unity3d 4.6.6版本 2d动画]
1:准备好unity使用Spine所需要的运行库,可到如下地址 https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine ...
- 如何给spine骨骼动画挂载粒子特效
目的是要把粒子挂载到骨骼动画的某个一个部件上,其实最主要是找对位置. 预览效果,左手红火,右手蓝火,很炫吧:) //init bool HelloWorld::init() { /////////// ...
随机推荐
- 2016 ACM/ICPC Asia Regional Qingdao Online HDU5883
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5883 解法:先判断是不是欧拉路,然后枚举 #pragma comment(linker, "/S ...
- [美]莫提默 J. 艾德勒《如何阅读一本书》
我最近在阅读一本书,这本书的书名叫<如何阅读一本书>(商务出版社,2015),顾名思义. 作者认为,阅读是一件跟写书一样复杂的活动,而许多人并不会阅读. 看过后,你可能会有“我真没 ...
- shell脚本例子集锦(习题总结)
练习一:写一个脚本 .设定变量FILE的值为/etc/passwd .依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么 形如:(提示:LINE=`wc -l /etc/passw ...
- Python存取XML方法简介
<?xml version="1.0" encoding="utf-8"?> <Schools> <School Name=&qu ...
- 从Unity学UE(一)之蓝图类的使用----制作一个可控灯光
转自:http://blog.csdn.net/u011707076/article/details/44171829 首先申明,本文章内容适合有Unity引擎基础的童鞋享用,如果不了解Unity引擎 ...
- SQL 批量删除数据表
) while(exists(select * from sysobjects where name like '表名前缀%')) begin select @name=name from sysob ...
- poj 3335(半平面交)
链接:http://poj.org/problem?id=3335 //大牛们常说的测模板题 ------------------------------------------------- ...
- python_way,day4 内置函数(callable,chr,随机验证码,ord),装饰器
python_way,day4 1.内置函数 - 下 制作一个随机验证码 2.装饰器 1.内置函数 - 下 callable() #对象能否被调用 chr() #10进制数字对应的ascii码表中的内 ...
- Codeforces Round #377 (Div. 2) D. Exams 二分
D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- 一致性 hash 算法( consistent hashing )
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛: 1 基 ...