cocos2d-x 打開url 和 截屏功能

cocos2d-x不支持跨平臺打開一個url,  所以我們分別要在 iOS 和 Android 上單寫。

  iOS端:

1.新建一個cocos2dx項目,在項目中創建一個.mm的文件,命名爲 OpenUrl。如下圖:


OpenUrl.h

  1. //  
  2. //  OpenUrl.h  
  3. //  OpenUrl  
  4. //  
  5. //  Created by XiangZi on 14-6-18.  
  6. //  
  7. //  
  8.   
  9. #ifndef __OpenUrl__OpenUrl__  
  10. #define __OpenUrl__OpenUrl__  
  11.   
  12. #include "cocos2d.h"  
  13. USING_NS_CC;  
  14. using namespace std;  
  15.   
  16. class OpenUrl  
  17. {  
  18. public:  
  19.     static OpenUrl* sharedOpenUrl();  
  20.     void openUrlFunc();  
  21. };  
  22.   
  23. #endif /* defined(__OpenUrl__OpenUrl__) */  


OpenUrl.mm
  1. //  
  2. //  OpenUrl.cpp  
  3. //  OpenUrl  
  4. //  
  5. //  Created by XiangZi on 14-6-18.  
  6. //  
  7. //  
  8.   
  9. #include "OpenUrl.h"  
  10.   
  11.   
  12. static OpenUrl* sharedStatic;  
  13. OpenUrl* OpenUrl::sharedOpenUrl()  
  14. {  
  15.     if(!sharedStatic){  
  16.         sharedStatic = new OpenUrl();  
  17.     }  
  18.     return sharedStatic;  
  19. }  
  20.   
  21. void OpenUrl::openUrlFunc()  
  22. {  
  23.     //大家可能會問:爲什麼要創建.mm文件,原因就在這,只有在.mm文件中下面兩句代碼纔不會報錯。。  
  24.     NSString *str = [NSString stringWithFormat: @"http://www.baidu.com"];  
  25.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];  
  26. }  

接下來我們回到主類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.   
  5. //導入Android平臺下所用的頭文件  
  6. #if CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID  
  7. #include <jni.h>  
  8. #include "platform/android/jni/JniHelper.h"  
  9. #include <android/log.h>  
  10. #endif  
  11.   
  12. using namespace cocos2d;  
  13. using namespace CocosDenshion;  
  14.   
  15. CCScene* HelloWorld::scene()  
  16. {  
  17.     CCScene *scene = CCScene::create();  
  18.     HelloWorld *layer = HelloWorld::create();  
  19.     scene->addChild(layer);  
  20.     return scene;  
  21. }  
  22.   
  23. bool HelloWorld::init()  
  24. {  
  25.     if ( !CCLayer::init() )  
  26.     {  
  27.         return false;  
  28.     }  
  29.       
  30.     CCSize size = CCDirector::sharedDirector()->getWinSize();  
  31.       
  32.     //增加一按鈕  
  33.     CCMenuItemLabel* baiduLabel = CCMenuItemLabel::create(CCLabelTTF::create("打開百度""Arial", 40), this, menu_selector(HelloWorld::menuCallFunc));  
  34.     baiduLabel->setPosition(ccp(size.width/2, size.height/2));  
  35.       
  36.     CCMenu* menu = CCMenu::create(baiduLabel,NULL);  
  37.     menu->setPosition(CCPointZero);  
  38.     this->addChild(menu);  
  39.   
  40.     return true;  
  41. }  
  42.   
  43.   
  44. void HelloWorld::menuCallFunc(CCObject* pSender)  
  45. {  
  46. //利用預編譯區分不同平臺  
  47. #if CC_TARGET_PLATFORM == CC_PLATFORM_IOS //ios平臺下  
  48.       
  49.     //調用OpenUrl類中的方法,完成ios訪問url  
  50.     OpenUrl::sharedOpenUrl()->openUrlFunc();  
  51.       
  52. #elif CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID  //Android平臺下,別忘導入Android平臺下所用的頭文件。  
  53.       
  54.     //定義Jni函數信息結構體  
  55.     JniMethodInfo minfo;  
  56.     //JniHelper類主要用於Jni與Java層之間的相互訪問的作用。 getStaticMethodInfo函數返回一個bool值表示是否找到此函數  
  57.     bool isHave = JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/lib/Cocos2dxActivity","openUrl""()V");  
  58.     if (isHave) {  
  59.         //調用此函數  
  60.         minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);  
  61.     }  
  62.       
  63. #endif  
  64. }  


 Android端:

把cocos2d-x項目編譯到Android的,並用Eclipse打開Android項目。

首先,在AndroidManifest.xml添加上網權限。

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

Cocos2d-x項目編譯到Android教程:http://blog.csdn.net/song_hui_xiang/article/details/15815493

  1. public static void openUrl()  
  2.    {  
  3.        Uri uri = Uri.parse("http://www.baidu.com");  
  4.        Intent it = new Intent(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.       
  9.     string imagePath = CCFileUtils::sharedFileUtils()->getWritablePath()+"score.png";//索引到圖片錄徑 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章