cocos2d-x不支持跨平臺打開一個url, 所以我們分別要在 iOS 和 Android 上單寫。
iOS端:
1.新建一個cocos2dx項目,在項目中創建一個.mm的文件,命名爲 OpenUrl。如下圖:
OpenUrl.h
- //
- // OpenUrl.h
- // OpenUrl
- //
- // Created by XiangZi on 14-6-18.
- //
- //
- #ifndef __OpenUrl__OpenUrl__
- #define __OpenUrl__OpenUrl__
- #include "cocos2d.h"
- USING_NS_CC;
- using namespace std;
- class OpenUrl
- {
- public:
- static OpenUrl* sharedOpenUrl();
- void openUrlFunc();
- };
- #endif /* defined(__OpenUrl__OpenUrl__) */
- //
- // OpenUrl.cpp
- // OpenUrl
- //
- // Created by XiangZi on 14-6-18.
- //
- //
- #include "OpenUrl.h"
- static OpenUrl* sharedStatic;
- OpenUrl* OpenUrl::sharedOpenUrl()
- {
- if(!sharedStatic){
- sharedStatic = new OpenUrl();
- }
- return sharedStatic;
- }
- void OpenUrl::openUrlFunc()
- {
- //大家可能會問:爲什麼要創建.mm文件,原因就在這,只有在.mm文件中下面兩句代碼纔不會報錯。。
- NSString *str = [NSString stringWithFormat: @"http://www.baidu.com"];
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString: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平臺下所用的頭文件
- #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
- #include <jni.h>
- #include "platform/android/jni/JniHelper.h"
- #include <android/log.h>
- #endif
- using namespace cocos2d;
- using namespace CocosDenshion;
- CCScene* HelloWorld::scene()
- {
- CCScene *scene = CCScene::create();
- HelloWorld *layer = HelloWorld::create();
- scene->addChild(layer);
- return scene;
- }
- bool HelloWorld::init()
- {
- if ( !CCLayer::init() )
- {
- return false;
- }
- CCSize size = 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);
- return true;
- }
- void HelloWorld::menuCallFunc(CCObject* pSender)
- {
- //利用預編譯區分不同平臺
- #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS //ios平臺下
- //調用OpenUrl類中的方法,完成ios訪問url
- OpenUrl::sharedOpenUrl()->openUrlFunc();
- #elif CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID //Android平臺下,別忘導入Android平臺下所用的頭文件。
- //定義Jni函數信息結構體
- JniMethodInfo minfo;
- //JniHelper類主要用於Jni與Java層之間的相互訪問的作用。 getStaticMethodInfo函數返回一個bool值表示是否找到此函數
- bool isHave = 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-permission android:name ="android.permission.INTERNET"/>
Cocos2d-x項目編譯到Android教程:http://blog.csdn.net/song_hui_xiang/article/details/15815493
- public static void openUrl()
- {
- Uri uri = Uri.parse("http://www.baidu.com");
- Intent it = new Intent(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);
- string imagePath = CCFileUtils::sharedFileUtils()->getWritablePath()+"score.png";//索引到圖片錄徑