dragonbonesCPP 在 Android 5.x 上问题的解决

在 cocos2d-x 3.4 上遇到了一个诡异的问题,记录如下。

平台和版本

  • 框架: cocos2d-x 3.4 final
  • 设备: Nexus 4/5/7 with Android 5.0.1/5.0.2
  • NDK version: r9d

问题描述

一个 dragonbonesCPP 骨骼动画,在 iOS、Windows、Mac OS X、Android with 4.x 上表现完全正常,但在 Android 5.x 下表现不正常。

具体表现为解析骨骼动画数据的时候,既不 crash,也没有任何报错信息,整个程序就停住了。 继续阅读dragonbonesCPP 在 Android 5.x 上问题的解决

cannot use ‘throw’ with exceptions disabled

cannot use ‘throw’ with exceptions disabled

在为 DragonBonesCPP/refactoring 的 cocos2d-x-3.2 demo 增加 Android 编译时,NDK 报了一个编译错误:

error: cannot use ‘throw’ with exceptions disabled
throw std::invalid_argument(“Invalid data.”);

这是由于 DragonBonesCPP 库使用了 C++ 标准异常,而 Android NDK 编译器默认不支持 C++ 异常控制导致。

但是,从Android NDK r5 版本开始,NDK 就开始支持 C++ 异常控制了,我的版本是 r9d ,为什么还会出现这个错误呢?

原来,NDK 编译器的 C++ 异常控制特性支持默认是关闭的。要打开它,可以这样做: 继续阅读cannot use ‘throw’ with exceptions disabled

在 quick-cocos2d-x 中使用 DragonBonesCPP

在 quick-cocos2d-x 中使用 DragonBonesCPP

Using DragonBonesCPP in quick-cocos2d-x.

2014-07-31更新:三件事已经全部搞定,DragonBonesCPP已经推送到了quick-cocos2d-x 官方库。


1 前言

DragonBones 官方C++版本 for cocos2d-x 这篇文章中,我已经简单地介绍过了 DragonBonesCPP 这套用于取代 CCArmature 的库。

在我自己修改的 quick-cocos2d-x 版本中,我已经把 CCArmature 库删除,完全使用 DragonBonesCPP 。

我们的产品也完全使用 Flash 和 DragonBonesCPP 来制作骨骼动画。所有AS3版本的DragonBones提供的功能,在CPP版本中都能完整地实现。

几个月之前,我就已经将 DragonBonesCPP 整合到了 quick-cocos2d-x 中,只是一直没有向官方库推送PR。这也是因为有几个内存泄露的BUG还没有解决。

现在,我终于有时间可以来做这件事。我的计划如下:

  1. 写一篇关于 DragonBonesCPP 的教程(quick专用哦);
  2. 解决 DragonBonesCPP 的遗留问题,并进一步封装lua api方便使用;
  3. 将 DragonBonesCPP 推送到quick的官方仓库。

那么,这篇文章就是第一件事了。 继续阅读在 quick-cocos2d-x 中使用 DragonBonesCPP

DragonBones 官方C++版本 for cocos2d-x

DragonBones 官方C++版本 for cocos2d-x

DragonBonesCPP for cocos2d-x

DragonBones 和 CCArmature

DragonBones 是一套骨骼动画工具集,最早使用 Flash 和 ActionScript 3.0 语言开发,主要在 Flash 游戏中使用,目前在页游和手游项目中使用很广泛。

DragonBones 目前包含下面这些内容:

  1. 基于 Flash IDE 中时间轴动画的编辑工具(美术GGMM的最爱);
  2. 基于 Flash IDE 插件的骨骼动画设计面板 DesignPanel
  3. 基于 ActionScript 3.0 的骨骼动画解析库和渲染库
  4. 基于 Javascript 的骨骼动画解析库和渲染库
  5. 基于 Unity3D C# 脚本的骨骼动画解析库和渲染库
  6. 基于 LoomScript 的骨骼动画解析库和渲染库

详细的入门介绍可以看这里: 继续阅读DragonBones 官方C++版本 for cocos2d-x

管理带有子模块的git库(以 DragonBonesCPP 为例)

2015-09-06 更新: 加入 删除子模块 的内容。


DragonBonesCPP 是一个包含子模块的库,在 clone/commit/push 的时候需要一些额外的操作。

本文将描述这些操作。

子模块(submodule)

限(wei)于(le)篇(tou)幅(lan),请自行学习下面的内容:

clone DragonBonesCPP

蛋碎方法一

git clone --recursive git@github.com:DragonBones/DragonBonesCPP.git

使用这个方法,将会自动 clone 该项目下的所有子模块。这其实是最简单的方法了。

为什么说它令人蛋碎呢?因为 DragoneBones 中包含的 engines/cocos2d-x 子模块也包含子模块。

这样就出现了嵌套子模块,一个 cocos2d-x 的所有历史加起来就超过1G了,再加上子模块的所有历史,这就……。 继续阅读管理带有子模块的git库(以 DragonBonesCPP 为例)

获取CCArmature动画的播放状态

获取CCArmature动画的播放状态

本文介绍如何在 CCArmature 播放的过程中获取动画的播放状态。例如,如何判断 “死亡” 动作已经播放完毕了?如果知道一个 “循环” 动作已经播放了一次?,提纲如下:

  1. 先决条件;
  2. 必要知识;
  3. MovementEventSignal 的用法。

继续阅读获取CCArmature动画的播放状态

cocos2d-x中CCArmature展示挤压和变形动画的问题

还是cocos2d-x,还是DragonBones。

已经写了两篇关于cocos2d-x和DragonBones的文章了,对它们两位感兴趣的,可以参考一下:

为了提升骨骼动画的表现力,我们对部分骨骼做了倾斜、缩放、变形的操作,在DragonBones中表现正常。这样,我们可以比较方便的实现呼吸、压扁这类特效,它们的变化虽然比较小,但是对整个动画的质量和表现力来说,会产生非常大的提升。

可是,这样的效果在CCAramture中表现不正常。

在对整个动画使用压扁效果的时候,在CCArmature中,相关的几个部件在压扁的过程中表现得好像被拉开了,好像外部有几个力希望把几个骨骼部件拉散一样。而在DragonBones中表现的是整体压扁。

我看了一下CCArmature包,发现这个包实际上是把AS3写的DragonBones用C++移植了一遍。

看来必须要看源码才能解决问题了。

在cocos2d-x中使用CCArmature实现骨骼动画

在cocos2d-x中使用CCArmature实现骨骼动画

using CCArmature in cocos2d-x.

  • 2014-07-15更新:更新 在 quick-cocos2d-x 中使用 DragonBonesCPP
  • 2014-04-28更新:更新 DragonBones 官方C++版本 for cocos2d-x
  • 2013-11-19更新:更新2.2.0bug处理情况
  • 2013-10-15更新:更新2.2.0bug处理情况
  • 2013-10-12更新:加入Cocos2d-x 2.2.0 的bug
  • 2013-10-11更新:加入CocoStudio动画编辑器导入 .fla 文件注意事项

重要更新 2014-07-15

在 quick-cocos2d-x 中使用 DragonBonesCPP

重要更新 2014-04-28

DragonBones 开发组已经对 DragonBones 进行了官方的 C++ 移植,很多以前我提到的问题都不复存在了。详情看这里 DragonBones 官方C++版本 for cocos2d-x

基础知识

要看懂本文,你需要了解骨骼动画(或称关节动画)是什么,以及CCArmature 和 DragonBones是什么。下面提供了一些资料:

注意,本文讲解的是 cocos2d-x 官方版本中自带的 CCArmature 库的使用。这个库是 DragonBones AS3 库的一个不完全移植版,它的官方骨骼动画制作工具是 Cocostudio(CCS),而不是Flash。

因此,使用Flash制作的骨骼动画,可能会被CCArmaue不完全支持。尤其是在CCArmature针对CCS做了那么多修改和优化之后。

用过CCS的人都知道,这个编辑器超级难用。很难说服美术GGMM去学习这么难用且难看的软件。对于只愿意使用熟悉的工具的美术GGMM来说,或许Flash就是唯一适合的。

To flash veteran: do you remember the ‘Moho’? 继续阅读在cocos2d-x中使用CCArmature实现骨骼动画