您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x 打开url 和 截屏功能

2015-09-14 15:07 615 查看
cocos2d-x不支持跨平台打开一个url, 所以我们分别要在 iOS 和 Android 上单写。

iOS端:

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



OpenUrl.h

[cpp]
view plaincopy

//
// 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.mm

[cpp]
view plaincopy

//
// 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

[cpp]
view plaincopy

#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添加上网权限。

[java]
view plaincopy

<uses-permission android:name ="android.permission.INTERNET"/>

然后,在Cocos2dxActivity.java中声明 openUrl()
方法。
Cocos2d-x项目编译到Android教程:/article/1931276.html

[cpp]
view plaincopy

public static void openUrl()
{
Uri uri = Uri.parse("http://www.baidu.com");
Intent it = new Intent(Intent.ACTION_VIEW,uri);
sContext.startActivity(it);
}

到此结束。

截屏功能:

[cpp]
view plaincopy

//截屏
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";//索引到图片录径
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: