有段时间没有写游戏代码了,这回来主要任务是要用jsb构建一个aprg动作游戏,看到3.0官方已经绑定好了armature的js函数,先来体验一把

3.0新建项目比2.2方便了很多,在终端运行tools下的create_project.py, 出现新建项目的图形界面!  赞

新建好一个js项目,像住场景添加一个龙骨动画:(记得在appdelegate.cpp中导入相关的绑定头文件,然后register...)

ccs.ArmatureDataManager.getInstance().addArmatureFileInfo("res/d3.png", "res/d3.plist", "res/d3.xml");
armature = ccs.Armature.create("demo");
...
this.addchild(armature);

  

ok,龙骨的动画显示出来了;

一个点击播放一个动作,手有点生了,点击响应要先在layer的继承类的ctor中:this.setTouchEnabled(true);

然后就可以在类中使用 onTouchesBegan和onTouchesEnded函数了;

Armature的基本使用:

ccs.ArmatureDataManager.getInstance().addArmatureFileInfo()  当导入cocostudio类型文件时(只需一个.ExportJson文件参数),当导入龙骨时(三个参数, png, plist, xml)
create(class_name) 传入类名来生成动画实例
getAnimation().playWithIndex(n) 从第n个动作开始播放;
++i; i = i% armature.getAnimation().getMovementCount(); armature.getAnimation().playWithIndex(i,10);在点击事件中用这个方法可以逐个播放所有动作:
getAnimation().setSpeedScale(f) 设置动画的播放速度
armature.init("Knight_f/Knight"); 等同与create+playerWithIndex ?
setZOrder(n) 改变动画的所在层级;
getAnimation().play(name,n) 播放动作名为name的动作, n参数很有用,设置两个动作间自动补间的帧数,让动作看起来更平滑;

Armature可以监听动作事件,设置某个动作事件时触发回调动作,例如:

getAnimation().setMovementEventCallFunc(this.animationEvent,this);  //为Armature添加一个事件监听

animationEvent:function (armature, movementType, movementID) {   //当事件loopComplete发生时触发下一个动作;
if (movementType == ccs.MovementEventType.loopComplete) {
if (movementID == "Fire") {...}}}

  

几个预定义的事件: boneFrameEvent/complete/loopComplete/movementChange/movementFameEvent/start

Armature也可以监听帧事件,设置某个帧事件时候触发回调动作,例如:

armature.getAnimation().setFrameEventCallFunc(this.onFrameEvent, this);

onFrameEvent: function (bone, evt, originFrameIndex, currentFrameIndex) {

}

  

添加骨骼,这里我们可以添加一个骨骼,设置它的表现(比如粒子光效),然后把它绑定在某个已有的骨骼上,这样光效就会跟随骨骼移动了

var p1 = cc.ParticleSystem.create("res/Particles/LavaFlow.plist"); //创建粒子
p1.setTotalParticles(50);var bone = ccs.Bone.create("p1"); //创建一个新的骨骼p1
bone.addDisplay(p1, 0); //为新骨骼添加一个表现
bone.changeDisplayWithIndex(0, true); //显示新骨骼的表现
bone.setIgnoreMovementBoneData(true); //?
bone.setZOrder(100);
bone.setScale(1.2);
this.armature.addBone(bone, "effect"); //将新的骨骼绑定到armature上的effect骨骼上,让新骨骼随effect骨骼运动;

  

修改骨骼的表现,实现换装效果

for (var i = 0; i < 7; i++) {
  var skin = ccs.Skin.createWithSpriteFrameName(weapon[i]); //创建skin对象
  this.armature.getBone("weapon").addDisplay(skin, i); //将skin对象添加到某个骨骼对象上
}
...
this.armature.getBone("weapon").changeDisplayWithIndex(this.displayIndex, true); //切换骨骼外观

  

3.0的绘图使用了新的api, 绘制出armature的碰撞边缘:

init:function(){
...
this.shape = cc.DrawNode.create(); //创建新画板
this.addChild(this.shape, 10); this.schedule(this.draw,2); //jsb下,draw函数是不会自动运行的
} draw:function () {
this.shape.clear(); //清楚上一帧的绘制
var size = cc.Director.getInstance().getWinSize();
var rect = this.armature.getBoundingBox(); //获取armature的边界
var rectArr = [ //将边界转为drawPoly所用的坐标
cc.p(rect.x, cc.rectGetMaxY(rect)),
cc.p(rect.x, rect.y),
cc.p(cc.rectGetMaxX(rect), rect.y),
cc.p(cc.rectGetMaxX(rect), cc.rectGetMaxY(rect))
];  
this.shape.drawPoly(rectArr, cc.c4f(0,0,0,0), 1, cc.c4f(0, 1, 0, 1)); //绘制图形,点与点之间顺序相连,第二个参数是填充,第三个是线粗细,第四个是边框
}

  

来张效果图:

cocos2d-x 3.0 Armature jsb 初体验的更多相关文章

  1. vue.js2.0 自定义组件初体验

    理解 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能.在有些情况 ...

  2. 阿里百川HotFix2.0热修复初体验

    博客原地址:http://blog.csdn.net/allan_bst/article/details/72904721 一.什么是热修复 热修复说白了就是"打补丁",比如你们公 ...

  3. AutoIt 3.0 操作之初体验(第一个脚本hello world)

    AutoIt 目前最新是v3 版本,它是一个使用类似BASIC 脚本语言的免费软件,它被设计用来进行Windows GUI(图形用户界面)的自动化测试.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来 ...

  4. 【腾讯Bugly干货分享】基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57d13a57132ff21c38110186 导语 最近这几年的前端圈子,由于 ...

  5. 基于 Webpack & Vue & Vue-Router 的 SPA 初体验

    基于 Webpack & Vue & Vue-Router 的 SPA 初体验 本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com ...

  6. ASP.NET2.0组件控件开发视频 初体验

    原文:ASP.NET2.0组件控件开发视频 初体验 ASP.NET2.0组件控件开发视频 初体验 录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku. ...

  7. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  8. (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  9. Django3.0 异步通信初体验

    此前博主曾经写过一篇博文,介绍了Django3.0的新特性,其中最主要的就是加入对ASGI的支持,实现全双工的异步通信. 2019年12月2日,Django终于正式发布了3.0版本.怀着无比的期待,我 ...

随机推荐

  1. OpenSSL 与 SSL 数字证书概念贴

    SSL/TLS 介绍见文章 SSL/TLS原理详解(http://seanlook.com/2015/01/07/tls-ssl). 如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自 ...

  2. poj2286The Rotation Game(迭代加深dfs)

    链接 把迭代加深理解错了 自己写了半天也没写对 所谓迭代加深,就是在深度无上限的情况下,先预估一个深度(尽量小)进行搜索,如果没有找到解,再逐步放大深度搜索.这种方法虽然会导致重复的遍历 某些结点,但 ...

  3. [hadoop源代码解读] 【SequenceFile】

    SequeceFile是Hadoop API提供的一种二进制文件支持.这种二进制文件直接将<key, value>对序列化到文件中.一般对小文件可以使用这种文件合并,即将文件名作为key, ...

  4. cat ,more, Less区别

    使用cat more less都可以查看文本内容,但是它们三者有什么区别呢?more和less的功能完全重复吗?以下是我个人的总结,欢迎大家一起来分享 cat        连续显示.查看文件内容mo ...

  5. bzoj1492

    好题+神题,首先肯定是dp,我们设f[i]为到第i天能获得的最多的B卷(设获得的钱数亦可)由题目hint可知,要么全买要么全卖,我们有f[i]=max(maxmoney,f[j]*b[i]+f[j]* ...

  6. chrome的timeline的问题?

    如图:Stalled.RequestSent等所表达的是什么意思呢? Stalled是浏览器得到要发出这个请求的指令,到请求可以发出的等待时间,一般是代理协商.以及等待可复用的TCP连接释放的时间,不 ...

  7. Frame 处理

    # -*- coding:utf-8 -*- """ 通过 id 或 name 识别处理 fram 框架 """ from selenium ...

  8. [NOIP2002]自由落体

    NOIp2002提高组 题目描述 在高为 H 的天花板上有 n 个小球,体积不计,位置分别为 0,1,2,….n-1.在地面上有一个小车(长为 L,高为 K,距原点距离为 S1).已知小球下落距离计算 ...

  9. rmi 与 远程代理复习

    ref:http://blog.csdn.net/pipisky2006/article/details/7296592 RMI: 远程方法调用,简单来说以前是调用本地对象的方法,现在如果对象在另外一 ...

  10. 应用程序连接oracle rac

    10g rac vip漂移的目的不是让client不加改变的连接过来而是让client尽快收到一个连接终止的包,然后由client去连接tnsnames中配置的下一个地址.和没有vip相比, 使用vi ...