cocos2d-x不支持跨平台打开一个url, 所以我们分别要在 iOS 和 Android 上单写。
iOS端:
1.新建一个cocos2dx项目,在项目中创建一个.mm的文件,命名为 OpenUrl。如下图:
OpenUrl.h
- //
- //OpenUrl.h
- //OpenUrl
- //
- //CreatedbyXiangZion14-6-18.
- //
- //
- #ifndef__OpenUrl__OpenUrl__
- #define__OpenUrl__OpenUrl__
- #include"cocos2d.h"
- USING_NS_CC;
- usingnamespacestd;
- classOpenUrl
- {
- public:
- staticOpenUrl*sharedOpenUrl();
- voidopenUrlFunc();
- };
- #endif/*defined(__OpenUrl__OpenUrl__)*/
- //
- //OpenUrl.cpp
- //OpenUrl
- //
- //CreatedbyXiangZion14-6-18.
- //
- //
- #include"OpenUrl.h"
- staticOpenUrl*sharedStatic;
- OpenUrl*OpenUrl::sharedOpenUrl()
- {
- if(!sharedStatic){
- sharedStatic=newOpenUrl();
- }
- returnsharedStatic;
- }
- voidOpenUrl::openUrlFunc()
- {
- //大家可能会问:为什么要创建.mm文件,原因就在这,只有在.mm文件中下面两句代码才不会报错。。
- NSString*str=[NSStringstringWithFormat:@"http://www.baidu.com"];
- [[UIApplicationsharedApplication]openURL:[NSURLURLWithString:str]];
- }
接下来我们回到主类HelloWorldScene.cpp,利用预编译,调用openUrlFunc()方法完成iOS端的url访问。再通过Jni调用Android的Java层代码(cocos2dx里访问调用Android函数)完成Android端在cpp的部署。
HelloWorldScene.cpp
- #include"HelloWorldScene.h"
- #include"SimpleAudioEngine.h"
- #include"OpenUrl.h"
- //导入Android平台下所用的头文件
- #ifCC_TARGET_PLATFORM==CC_PLATFORM_ANDROID
- #include<jni.h>
- #include"platform/android/jni/JniHelper.h"
- #include<android/log.h>
- #endif
- usingnamespacecocos2d;
- usingnamespaceCocosDenshion;
- CCScene*HelloWorld::scene()
- {
- CCScene*scene=CCScene::create();
- HelloWorld*layer=HelloWorld::create();
- scene->addChild(layer);
- returnscene;
- }
- boolHelloWorld::init()
- {
- if(!CCLayer::init())
- {
- returnfalse;
- }
- CCSizesize=CCDirector::sharedDirector()->getWinSize();
- //增加一按钮
- CCMenuItemLabel*baiduLabel=CCMenuItemLabel::create(CCLabelTTF::create("打开百度","Arial",40),this,menu_selector(HelloWorld::menuCallFunc));
- baiduLabel->setPosition(ccp(size.width/2,size.height/2));
- CCMenu*menu=CCMenu::create(baiduLabel,NULL);
- menu->setPosition(CCPointZero);
- this->addChild(menu);
- returntrue;
- }
- voidHelloWorld::menuCallFunc(CCObject*pSender)
- {
- //利用预编译区分不同平台
- #ifCC_TARGET_PLATFORM==CC_PLATFORM_IOS//ios平台下
- //调用OpenUrl类中的方法,完成ios访问url
- OpenUrl::sharedOpenUrl()->openUrlFunc();
- #elifCC_TARGET_PLATFORM==CC_PLATFORM_ANDROID//Android平台下,别忘导入Android平台下所用的头文件。
- //定义Jni函数信息结构体
- JniMethodInfominfo;
- //JniHelper类主要用于Jni与Java层之间的相互访问的作用。getStaticMethodInfo函数返回一个bool值表示是否找到此函数
- boolisHave=JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/lib/Cocos2dxActivity","openUrl","()V");
- if(isHave){
- //调用此函数
- minfo.env->CallStaticVoidMethod(minfo.classID,minfo.methodID);
- }
- #endif
- }
Android端:
把cocos2d-x项目编译到Android的,并用Eclipse打开Android项目。
首先,在AndroidManifest.xml添加上网权限。
- <uses-permissionandroid:name="android.permission.INTERNET"/>
Cocos2d-x项目编译到Android教程:http://www.jb51.cc/article/p-unwlqvwn-nk.html
- publicstaticvoidopenUrl()
- {
- Uriuri=Uri.parse("http://www.baidu.com");
- Intentit=newIntent(Intent.ACTION_VIEW,uri);
- sContext.startActivity(it);
- }
到此结束。
截屏功能:
- //截屏
- CCRenderTexture*texture=CCRenderTexture::create((int)size.width,(int)size.height);
- texture->begin();
- CCDirector::sharedDirector()->getRunningScene()->visit();
- texture->end();
- texture->saveToFile("score.png",kCCImageFormatPNG);//图片命名为score.png并作保存
- CC_SAFE_DELETE(texture);
- stringimagePath=CCFileUtils::sharedFileUtils()->getWritablePath()+"score.png";//索引到图片录径