加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x 打开url 和 截屏功能

发布时间:2020-12-14 16:33:10 所属栏目:百科 来源:网络整理
导读:cocos2d-x不支持跨平台打开一个url, 所以我们分别要在 iOS 和 Android 上单写。 iOS端: 1.新建一个cocos2dx项目,在项目中创建一个.mm的文件,命名为 OpenUrl。如下图: OpenUrl.h [cpp] view plain copy // //OpenUrl.h //OpenUrl // //CreatedbyXiangZio

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

iOS端:

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


OpenUrl.h

[cpp] view plain copy
  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
[cpp] view plain copy
  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

[cpp] view plain copy
  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添加上网权限。

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

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

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

到此结束。


截屏功能:

[cpp] view plain copy
  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";//索引到图片录径

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读