微智科技网
您的当前位置:首页Cocos2dx-demo演示项目:Part1

Cocos2dx-demo演示项目:Part1

来源:微智科技网

  这个项目,我主要是用来积累、记录自己在利用cocos2dx引擎进行项目开发、学习实践中的开发经验。每天的开发任务、查看别人分享的内容,总是能够收获到可取的东西,将这些可取的东西自己再着手开发一次,能够进一步深刻理解这些,同时今后如果碰到类似的开发需求,我也可以很快的迁移到开发项目中去。所以我将自己日常生活中积累的知识点通过一个演示项目,展示出来。因为没有苹果设备,不具备条件所以我只做安卓这块的开发(相关组件的添加是需要安卓、ios分开添加的)。


 

Part1:友盟社交分享

添加这个组件的原因:

  游戏开发中,如果添加了社交分享元素,那么游戏的互动性将会大大的提升,对于提升游戏留存的能提供很大的帮助。各个社交网站都提供了分享的api接口,如果单独为每个社交分享去写支持接口,那么任务量会挺大的。有需求就会有市场,友盟就提供了社交分享的组件,将大多数社交网站的分享功能都组合都一起了。既然友盟都封装好了,所以我就使用这个组件咯。

  我的笔记是在开发过程中记录下来的,发表到博客是对自己在evernote上记下的东西进行整理。博客也不一定是按照demo项目的各个部分的开发日期顺序来写的。

  官方对如何添加组件有详细的文档,我所记录的是在我添加组件的过程中遇到的一些问题。

1、添加官方提供的代码文件:

  因为要跨平台,所以C++ 2 Java、C++ 2 Object-C是必须的,但是直接将java调用的方法、object-c调用的方法放到工程中去,不做调整的话肯定是有问题的。因此官方就有这样的解决方案:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)

#endif

采用预编译宏来解决跨平台编译的问题,这也就是引擎做跨平台支持采用的方案。那么问题来了,友盟这里就有点问题,不过也不怪他,代码中都说了:

  人家是机器生成的代码,难免有问题。问题是什么?

  主要是安卓这块,即-Android文件夹内部的问题。他没有采用 #if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 这个来判断!!!所以无论是用VS、还是用XCODE,都会报错,因为找不到<jni.h>文件,导致编译不了!(其实我很早之前就有做过添加友盟组件的工作,当时也遇到了这个问题,但是限于当时的能力没有发现原来是这个原因引发的问题)。

  所以解决方案就是使用:#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) 这个,将这个文件夹内的类代码处理,vs上不编译。这个类里面其实都是些Java调用C++、C++调用Java的方法,所以直接在win32上是不能通过编译的。

2、分享处理及相关:

  在做自定义按钮分享的时候,在按钮的回调函数中:

  这样就可以打开友盟的分享面板了。需要注意的是,分享的回调函数需要是一个全局函数的!即代码中的shareTest是一个全局函数,我觉得这一点在看了实际代码后会更能理解.

3、关于友盟的截图分享功能:

具体来看:(友盟组件2.0,cocos2dx v3.2)

  解决方案便是修改这个函数,追加一个判断:

 1 else if(imgName.startsWith("/data")){ 
 2 
 3     if(!TextUtils.isEmpty(imgName)){ 
 4 
 5     File imgFile = new File(imgName); 
 6 
 7     shareImage = new UMImage(mActivity, imgFile); 
 8 
 9     }
10 }

4、微信分享:

  需要使用微信分享的话,那么游戏的安卓包必须是签名包(怎么签名网上有很多文档),否则启动不了微信的分享activity。这个问题好像(或者是我没有注意到)友盟官方没有提到,所以当时我在添加微信分享的时候,一直打不开微信分享的UI界面,也是折腾了挺久的。

转载于:https://www.cnblogs.com/zhong-dev/p/4216869.html

因篇幅问题不能全部显示,请点此查看更多更全内容