cocos2d-x 打开url 和 截屏功能

cocos2d-x不支持跨平台打开一个url, 所以我们分别要在 iOS 和 Android 上单写。

iOS端:

1.新建一个cocos2dx项目,在项目中创建一个.mm的文件,命名为 OpenUrl。如下图:


OpenUrl.h

  1. //
  2. //OpenUrl.h
  3. //OpenUrl
  4. //
  5. //CreatedbyXiangZion14-6-18.
  6. //
  7. //
  8. #ifndef__OpenUrl__OpenUrl__
  9. #define__OpenUrl__OpenUrl__
  10. #include"cocos2d.h"
  11. USING_NS_CC;
  12. usingnamespacestd;
  13. classOpenUrl
  14. {
  15. public:
  16. staticOpenUrl*sharedOpenUrl();
  17. voidopenUrlFunc();
  18. };
  19. #endif/*defined(__OpenUrl__OpenUrl__)*/


OpenUrl.mm
  1. //
  2. //OpenUrl.cpp
  3. //OpenUrl
  4. //
  5. //CreatedbyXiangZion14-6-18.
  6. //
  7. //
  8. #include"OpenUrl.h"
  9. staticOpenUrl*sharedStatic;
  10. OpenUrl*OpenUrl::sharedOpenUrl()
  11. {
  12. if(!sharedStatic){
  13. sharedStatic=newOpenUrl();
  14. }
  15. returnsharedStatic;
  16. }
  17. voidOpenUrl::openUrlFunc()
  18. {
  19. //大家可能会问:为什么要创建.mm文件,原因就在这,只有在.mm文件中下面两句代码才不会报错。。
  20. NSString*str=[NSStringstringWithFormat:@"http://www.baidu.com"];
  21. [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:str]];
  22. }

接下来我们回到主类HelloWorldScene.cpp,利用预编译调用openUrlFunc()方法完成iOS端的url访问。再通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)完成Android端在cpp的部署

HelloWorldScene.cpp

  1. #include"HelloWorldScene.h"
  2. #include"SimpleAudioEngine.h"
  3. #include"OpenUrl.h"
  4. //导入Android平台下所用的头文件
  5. #ifCC_TARGET_PLATFORM==CC_PLATFORM_ANDROID
  6. #include<jni.h>
  7. #include"platform/android/jni/JniHelper.h"
  8. #include<android/log.h>
  9. #endif
  10. usingnamespacecocos2d;
  11. usingnamespaceCocosDenshion;
  12. CCScene*HelloWorld::scene()
  13. {
  14. CCScene*scene=CCScene::create();
  15. HelloWorld*layer=HelloWorld::create();
  16. scene->addChild(layer);
  17. returnscene;
  18. }
  19. boolHelloWorld::init()
  20. {
  21. if(!CCLayer::init())
  22. {
  23. returnfalse;
  24. }
  25. CCSizesize=CCDirector::sharedDirector()->getWinSize();
  26. //增加一按钮
  27. CCMenuItemLabel*baiduLabel=CCMenuItemLabel::create(CCLabelTTF::create("打开百度","Arial",40),this,menu_selector(HelloWorld::menuCallFunc));
  28. baiduLabel->setPosition(ccp(size.width/2,size.height/2));
  29. CCMenu*menu=CCMenu::create(baiduLabel,NULL);
  30. menu->setPosition(CCPointZero);
  31. this->addChild(menu);
  32. returntrue;
  33. }
  34. voidHelloWorld::menuCallFunc(CCObject*pSender)
  35. {
  36. //利用预编译区分不同平台
  37. #ifCC_TARGET_PLATFORM==CC_PLATFORM_IOS//ios平台下
  38. //调用OpenUrl类中的方法,完成ios访问url
  39. OpenUrl::sharedOpenUrl()->openUrlFunc();
  40. #elifCC_TARGET_PLATFORM==CC_PLATFORM_ANDROID//Android平台下,别忘导入Android平台下所用的头文件
  41. //定义Jni函数信息结构体
  42. JniMethodInfominfo;
  43. //JniHelper类主要用于Jni与Java层之间的相互访问的作用。getStaticMethodInfo函数返回一个bool值表示是否找到此函数
  44. boolisHave=JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/lib/Cocos2dxActivity","openUrl","()V");
  45. if(isHave){
  46. //调用函数
  47. minfo.env->CallStaticVoidMethod(minfo.classID,minfo.methodID);
  48. }
  49. #endif
  50. }


Android端:

把cocos2d-x项目编译到Android的,并用Eclipse打开Android项目。

首先,在AndroidManifest.xml添加上网权限。

  1. <uses-permissionandroid:name="android.permission.INTERNET"/>
然后,在Cocos2dxActivity.java中声明openUrl() 方法

Cocos2d-x项目编译到Android教程:http://www.jb51.cc/article/p-unwlqvwn-nk.html

  1. publicstaticvoidopenUrl()
  2. {
  3. Uriuri=Uri.parse("http://www.baidu.com");
  4. Intentit=newIntent(Intent.ACTION_VIEW,uri);
  5. sContext.startActivity(it);
  6. }

到此结束。


截屏功能:

  1. //截屏
  2. CCRenderTexture*texture=CCRenderTexture::create((int)size.width,(int)size.height);
  3. texture->begin();
  4. CCDirector::sharedDirector()->getRunningScene()->visit();
  5. texture->end();
  6. texture->saveToFile("score.png",kCCImageFormatPNG);//图片命名为score.png并作保存
  7. CC_SAFE_DELETE(texture);
  8. stringimagePath=CCFileUtils::sharedFileUtils()->getWritablePath()+"score.png";//索引到图片录径

相关文章

操作步骤 1、创建cocos2d-x工程 2、新建 Scene1.cpp Scene1.h Scene1.h代码 #ifndef __SCENE1_H__#defi...
开发环境:OS(WINDOWS 8.1 X64 企业版) cocos2d-x 2.2.1 vs2010 想给vs安装上cocos的模版,执行Install...
把创建项目做成一个批处理,当创建项目时可以省时省力很多。 操作步骤 1、在 E:cocos2d-x-2.2.1toolspr...
https://www.cnblogs.com/JiaoQing/p/3906780.html 四个响应函数 1 EventListenerPhysicsContact* evC...
转载于 http://www.cnblogs.com/kenkofox/p/3926797.html 熟悉js的dom事件或者flash事件的,基本都能立...
ScrollView(滚动容器)加载大量item时会导致游戏界面的卡顿,严重时整个界面会出现卡死的情况。最近项...