cocos2dx

时间:2024-10-23 10:30:40编辑:流行君

如何在Cocos2d-x中集成安卓版微信SDK

1
1.如果能在Cocos2d-x中集成微信SDK,让游戏能分享给好友或者朋友圈,那对游戏推广将会是非常有利的。好了,本文就是手把手地教大伙如何在Cocos2d-x中集成微信SDK。
先看下效果分享给好友,点击即可跳转链接:

2
分享到朋友圈,点击即可跳转链接:

3
2.环境
OS: Mac OSX
IDE: Xcode v5.11 and Eclipse ADT v22.3
Android SDK:4.3
Adnroid NDK:r9d
Cocos2d-x 3.2release
3.创建Cocos2d-x工程这里不再详述,网上的资料多如牛毛了。这里我按自己习惯的方式来。(1)命令行创建Cocos2dxWechat项目

$ cocos new -p com.fusijie.cocos2dxwechat -l cpp -d . Cocos2dxWechat
(2)交叉编译生成so文件

$ cd Cocos2dxWechat/proj.android/

$ ./build_native.py
(3)导入Eclipse生成APK导入libcocos2dx项目和Cocos2dxWechat项目到Eclipse中。在真机中成功运行Cocos2dxWechat.apk。4.申请创建微信应用这一步主要是在微信开放平台上申请创建移动应用,获取AppID。微信开放平台的网址是:https://open.weixin.qq.com/(1)注册帐号,进入管理中心,点击创建移动应用。(2)第一步是填写应用名,描述,图标等等。如下图。


4
(3)填写应用官网,勾选Android应用,填写签名,包名等等。如下图。

5
注意:这里需要特别注意的是应用签名这一项。在第三步的时候,真机中成功运行Cocos2dxWechat.apk之后,我们需要从微信开放平台下载一个签名生成软件GenSignature
安装签名生成后,打开软件输入游戏包名获取即可。

6
这里的签名和游戏的包名和keystore是相关联的,如果修改了包名或者更换了keystore,必须同步更新微信开放平台管理中心的信息,防止失效。本示例采用的是debug签名。在完成以上工作后,提交审核即可。说是7天,实际上一般1~2天就审核过了。5.集成微信SDK刚才都是铺垫,这里开始才是进入主题了。要在Cocos2d-x调用微信安卓SDK,Jni跑不掉的。这里只演示如何进行分享到朋友圈和分享给好友,微信SDK还有很多高级的功能,如支付,收藏等等接口,有需要自行参考文档(移动应用开发)进行开发。
这里主要分成3部分来解释:
微信SDK下载,jar包导入
Android代码
C++代码
(1)下载微信SDK
(2)打开下载的Android_SDK.zip。解压,将lib目录下的libammsdk.jar拷到Cocos2dxWechat项目下的libs目录。(3)右键单击工程,选择Build Path中的Configure Build Path...,选中Libraries这个tab,并通过Add Jars...导入工程libs目录下的libammsdk.jar文件。

7
(4)在AppActivity中添加成员变量
private static final String APP_ID = "wx81115d2aa55710fa";//AppID,从第四步获取

private static IWXAPI api;//微信API接口
private static AppActivity instance;//类静态实例,为了方便后面静态函数的调用
(5)注册到微信打开AppActivity,在onCreate()中调用regToWX()注册到微信

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

instance = this;
regToWX();
}

private void regToWX(){
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
api.registerApp(APP_ID);
}

(6)由于这里采用的分享示例传递了一张icon,所以需要额外的一个bitmap的解析类Util类,这个类可以到微信官方SDK demo下载,也可以在本示例中下载(早期的SDK版本这个类是集成在微信SDK中)。icon放在res目录下的drawable目录,我这里偷个懒直接使用了应用icon。(7)分享给好友


public static void sendMsgToFriend(){


if(api.openWXApp())
{
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = "http://www.fusijie.com";
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "Tittle";
msg.description = "Description";

Bitmap thumb = BitmapFactory.decodeResource(instance.getResources(), R.drawable.icon);
msg.thumbData = Util.bmpToByteArray(thumb, true);

SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession;
api.sendReq(req);
}
else
{
Toast.makeText(instance, "未安装微信", Toast.LENGTH_SHORT).show();
}
}
(8)分享到朋友圈

public static void sendMsgToTimeLine(){


if(api.openWXApp())
{
if(api.getWXAppSupportAPI() >= 0x21020001)
{
WXWebpageObject webpage = new WXWebpageObject();
webpage.webpageUrl = "http://www.fusijie.com";
WXMediaMessage msg = new WXMediaMessage(webpage);
msg.title = "Tittle";
msg.description = "Description";

Bitmap thumb = BitmapFactory.decodeResource(instance.getResources(), R.drawable.icon);
msg.thumbData = Util.bmpToByteArray(thumb, true);

SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction = buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneTimeline;
api.sendReq(req);
}
else{
Toast.makeText(instance, "微信版本过低", Toast.LENGTH_SHORT).show();
}
}
else
{
Toast.makeText(instance, "未安装微信", Toast.LENGTH_SHORT).show();
}
}
其中buildTransaction()用于生成一个唯一的会话标识符。

private static String buildTransaction(final String type) {

return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
代码不难,所以不再逐行解释,可以参考SDK文档。(9)JNI调用在Classes目录下新建一个WeixinShare类,主要包含2个静态函数:

void WeiXinShare::sendToFriend()

{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo minfo;

bool isHave = JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/cpp/AppActivity","sendMsgToFriend", "()V");

if (!isHave) {
log("jni:sendMsgToFriend is null");
}else{
//调用此函数
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
}
#endif
}

void WeiXinShare::sendToTimeLine()
{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
JniMethodInfo minfo;

bool isHave = JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/cpp/AppActivity","sendMsgToTimeLine", "()V");

if (!isHave) {
log("jni:sendMsgToTimeLine is null");
}else{
//调用此函数
minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
}
#endif
}




(10)Cocos2d-x使用这个就比较简单了,只要包含这个WeiXinShare类,调用这两个静态函数即可。
void HelloWorld::menuCloseCallback(Ref* pSender)

{
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
//WeiXinShare::sendToFriend();
WeiXinShare::sendToTimeLine();
#endif
}

(11)Android.mk的修改最后不要忘记修改Android.mk文件。
复制代码


LOCAL_SRC_FILES := hellocpp/main.cpp \
../../Classes/AppDelegate.cpp \
../../Classes/HelloWorldScene.cpp \
../../Classes/WeiXinShare.cpp
(12)重新交叉编译,打包为APK即可6.总结本文写的比较详细,但是也忽略了比如如何接收微信的请求及返回值的说明以及如何进行混淆等等,算是一个初级教程吧。主要是面向对jni调用,第三方安卓sdk集成不太了解的朋友。这里虽然只是针对微信sdk的部分功能集成进行说明,但是道理都是共通的,如何集成微博分享,如何集成第三方广告等等,用类似的方法都可以实现。


如何在Cocos2d-x中集成安卓版微信SDK

 方法/步骤
  1.如果能在Cocos2d-x中集成微信SDK,让游戏能分享给好友或者朋友圈,那对游戏推广将会是非常有利的。好了,本文就是手把手地教大伙如何在Cocos2d-x中集成微信SDK。
  先看下效果分享给好友,点击即可跳转链接:
  分享到朋友圈,点击即可跳转链接:
  2.环境
  OS: Mac OSX
  IDE: Xcode v5.11 and Eclipse ADT v22.3
  Android SDK:4.3
  Adnroid NDK:r9d
  Cocos2d-x 3.2release
  3.创建Cocos2d-x工程这里不再详述,网上的资料多如牛毛了。这里我按自己习惯的方式来。(1)命令行创建Cocos2dxWechat项目

  $ cocos new -p com.fusijie.cocos2dxwechat -l cpp -d . Cocos2dxWechat

  (2)交叉编译生成so文件

  $ cd Cocos2dxWechat/proj.android/
  $ ./build_native.py

  (3)导入Eclipse生成APK导入libcocos2dx项目和Cocos2dxWechat项目到Eclipse中。在真机中成功运行Cocos2dxWechat.apk。4.申请创建微信应用这一步主要是在微信开放平台上申请创建移动应用,获取AppID。微信开放平台的网址(1)注册帐号,进入管理中心,点击创建移动应用。(2)第一步是填写应用名,描述,图标等等。如下图。
  (3)填写应用官网,勾选Android应用,填写签名,包名等等。如下图。
  注意:这里需要特别注意的是应用签名这一项。在第三步的时候,真机中成功运行Cocos2dxWechat.apk之后,我们需要从微信开放平台下载一个签名生成软件GenSignature
  安装签名生成后,打开软件输入游戏包名获取即可。
  这里的签名和游戏的包名和keystore是相关联的,如果修改了包名或者更换了keystore,必须同步更新微信开放平台管理中心的信息,防止失效。本示例采用的是debug签名。在完成以上工作后,提交审核即可。说是7天,实际上一般1~2天就审核过了。5.集成微信SDK刚才都是铺垫,这里开始才是进入主题了。要在Cocos2d-x调用微信安卓SDK,Jni跑不掉的。这里只演示如何进行分享到朋友圈和分享给好友,微信SDK还有很多高级的功能,如支付,收藏等等接口,有需要自行参考文档(移动应用开发)进行开发。
  这里主要分成3部分来解释:
  微信SDK下载,jar包导入
  Android代码
  C++代码
  (1)下载微信SDK
  (2)打开下载的Android_SDK.zip。解压,将lib目录下的libammsdk.jar拷到Cocos2dxWechat项目下的libs目录。(3)右键单击工程,选择Build Path中的Configure Build Path...,选中Libraries这个tab,并通过Add Jars...导入工程libs目录下的libammsdk.jar文件。
  (4)在AppActivity中添加成员变量

  private static final String APP_ID = "wx81115d2aa55710fa";//AppID,从第四步获取
  private static IWXAPI api;//微信API接口
  private static AppActivity instance;//类静态实例,为了方便后面静态函数的调用

  (5)注册到微信打开AppActivity,在onCreate()中调用regToWX()注册到微信

  protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);

  instance = this;
  regToWX();
  }

  private void regToWX(){
  api = WXAPIFactory.createWXAPI(this, APP_ID, true);
  api.registerApp(APP_ID);
  }

  (6)由于这里采用的分享示例传递了一张icon,所以需要额外的一个bitmap的解析类Util类,这个类可以到微信官方SDK demo下载,也可以在本示例中下载(早期的SDK版本这个类是集成在微信SDK中)。icon放在res目录下的drawable目录,我这里偷个懒直接使用了应用icon。(7)分享给好友

  public static void sendMsgToFriend(){

  if(api.openWXApp())
  {
  WXWebpageObject webpage = new WXWebpageObject();
  webpage.webpageUrl = "";
  WXMediaMessage msg = new WXMediaMessage(webpage);
  msg.title = "Tittle";
  msg.description = "Description";

  Bitmap thumb = BitmapFactory.decodeResource(instance.getResources(), R.drawable.icon);
  msg.thumbData = Util.bmpToByteArray(thumb, true);

  SendMessageToWX.Req req = new SendMessageToWX.Req();
  req.transaction = buildTransaction("webpage");
  req.message = msg;
  req.scene = SendMessageToWX.Req.WXSceneSession;
  api.sendReq(req);
  }
  else
  {
  Toast.makeText(instance, "未安装微信", Toast.LENGTH_SHORT).show();
  }
  }

  (8)分享到朋友圈

  public static void sendMsgToTimeLine(){

  if(api.openWXApp())
  {
  if(api.getWXAppSupportAPI() >= 0x21020001)
  {
  WXWebpageObject webpage = new WXWebpageObject();
  webpage.webpageUrl = "";
  WXMediaMessage msg = new WXMediaMessage(webpage);
  msg.title = "Tittle";
  msg.description = "Description";

  Bitmap thumb = BitmapFactory.decodeResource(instance.getResources(), R.drawable.icon);
  msg.thumbData = Util.bmpToByteArray(thumb, true);

  SendMessageToWX.Req req = new SendMessageToWX.Req();
  req.transaction = buildTransaction("webpage");
  req.message = msg;
  req.scene = SendMessageToWX.Req.WXSceneTimeline;
  api.sendReq(req);
  }
  else{
  Toast.makeText(instance, "微信版本过低", Toast.LENGTH_SHORT).show();
  }
  }
  else
  {
  Toast.makeText(instance, "未安装微信", Toast.LENGTH_SHORT).show();
  }
  }

  其中buildTransaction()用于生成一个唯一的会话标识符。

  private static String buildTransaction(final String type) {
  return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
  }

  代码不难,所以不再逐行解释,可以参考SDK文档。(9)JNI调用在Classes目录下新建一个WeixinShare类,主要包含2个静态函数:

  void WeiXinShare::sendToFriend()
  {
  #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
  JniMethodInfo minfo;

  bool isHave = JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/cpp/AppActivity","sendMsgToFriend", "()V");

  if (!isHave) {
  log("jni:sendMsgToFriend is null");
  }else{
  //调用此函数
  minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
  }
  #endif
  }

  void WeiXinShare::sendToTimeLine()
  {
  #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
  JniMethodInfo minfo;

  bool isHave = JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/cpp/AppActivity","sendMsgToTimeLine", "()V");

  if (!isHave) {
  log("jni:sendMsgToTimeLine is null");
  }else{
  //调用此函数
  minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
  }
  #endif
  }

  (10)Cocos2d-x使用这个就比较简单了,只要包含这个WeiXinShare类,调用这两个静态函数即可。

  void HelloWorld::menuCloseCallback(Ref* pSender)
  {
  #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
  //WeiXinShare::sendToFriend();
  WeiXinShare::sendToTimeLine();
  #endif
  }

  (11)Android.mk的修改最后不要忘记修改Android.mk文件。

  复制代码

  LOCAL_SRC_FILES := hellocpp/main.cpp \
  ../../Classes/AppDelegate.cpp \
  ../../Classes/HelloWorldScene.cpp \
  ../../Classes/WeiXinShare.cpp

  (12)重新交叉编译,打包为APK即可6.总结本文写的比较详细,但是也忽略了比如如何接收微信的请求及返回值的说明以及如何进行混淆等等,算是一个初级教程吧。主要是面向对jni调用,第三方安卓sdk集成不太了解的朋友。这里虽然只是针对微信sdk的部分功能集成进行说明,但是道理都是共通的,如何集成微博分享,如何集成第三方广告等等,用类似的方法都可以实现。


cocos2dx 接电话后返回游戏声音没有

第一、我们双击电脑右下角的音量图标,打开音量控制,点选项,选择属性--播放,在下拉框里的麦克风勾上,再在麦克风一栏里把音量拉到最上方,并把下面静音的勾去了。第二、同样方法打开音量控制,点选项,选择属性--录音,在下拉框里的麦克风勾上,再在麦克风一栏里把音量拉到最上方(下面不选择麦克风优先也可以)。第三、打开控制面板,双击声音和音频设备,选择语声选项卡,点测试硬件,这段时间你可以根据提示来操作,同时不要忘记对着自己的麦克风说话,如果能正确完成,说明你的硬件没问题。引擎介绍Cocos2d-x是MIT许可证下发布的开源游戏引擎,游戏开发快速、简易、功能强大。2015年2月,触控科技正式推出了游戏开发一站式解决方案cocos,将Cocos 2d-x、Cocos Studio、Cocos Code IDE等框架及工具整合在一起。 Cocos2d-x核心优势在于允许开发人员利用C++、Lua及Javascript来进行跨平台部署,覆盖平台包括iOS、Android、Windows Phone、Windows, Mac OSX 3及Tizen等等,省事省力省成本。

怎样设置cocos2dx背景透明

方法/步骤
1
废话不多说,先放图。

2
就如果你想让你的activity透明,很简单,只需要4步。1. 打开AndroidManifest.xml文件,添加Translucent到
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

3
2.打开Cocos2dxActivity.java文件,添加
getWindow().setFormat(PixelFormat.TRANSLUCENT);

4
3.打开cocos2d/cocos/2d/CCDirector.cpp文件,找到setGLDefaultValues()函数,修改最后一个alpha值,范围从0.0f到1.0f。

5
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

6
4.打开cocos2d/cocos/2d/platform/android/nativeactivity.cpp,找到engine_init_display(struct engine* engine)函数,修改如下数组

7

const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_RED_SIZE, 5,
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};

const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
//EGL_BLUE_SIZE, 5, -->delete
//EGL_GREEN_SIZE, 6, -->delete
//EGL_RED_SIZE, 5, -->delete
EGL_BUFFER_SIZE, 32, //-->new field
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};


怎样设置cocos2dx背景透明

就如果你想让你的activity透明,很简单,只需要4步。1. 打开AndroidManifest.xml文件,添加Translucent到
android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

3
2.打开Cocos2dxActivity.java文件,添加
getWindow().setFormat(PixelFormat.TRANSLUCENT);

4
3.打开cocos2d/cocos/2d/CCDirector.cpp文件,找到setGLDefaultValues()函数,修改最后一个alpha值,范围从0.0f到1.0f。

5
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

6
4.打开cocos2d/cocos/2d/platform/android/nativeactivity.cpp,找到engine_init_display(struct engine* engine)函数,修改如下数组

7

const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_RED_SIZE, 5,
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};

const EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
//EGL_BLUE_SIZE, 5, -->delete
//EGL_GREEN_SIZE, 6, -->delete
//EGL_RED_SIZE, 5, -->delete
EGL_BUFFER_SIZE, 32, //-->new field
EGL_DEPTH_SIZE, 16,
EGL_STENCIL_SIZE, 8,
EGL_NONE
};


上一篇:小米2a

下一篇:没有了