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";//索引到图片录径
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";//索引到图片录径
相关文章推荐
- cocos基础教程(2)Window环境下搭建(补充)
- cocos基础教程(2)Window环境下搭建
- cocos2dx 利用schedule实现长按触发事件功能
- cocos2dx 利用CCLabelTTF设置字的水平间距与垂直间距
- 在Xcode下编译cocos2d-x语言为lua时出错的解决方案
- cocos2d-x 利用CCLabelTTF制作文字描边与阴影效果的实现方法
- cocos2D(五岁以下儿童)---- CCNode
- cocos基础教程(1)Mac环境下搭建
- Cocos2dx-jsb 中Node的onEnter过程分析(1)
- cocos2dx 3.x api
- cocos2dx 3.x 弃用列表
- 【cocos2dx-3.0beta-制作flappybird】尾随时代潮流,关于引擎升级
- 火云开发课堂 - 《使用Cocos2d-x 开发3D游戏》系列 第十五节:3D粒子系统
- cocos2d-x 血量条实现:LoadingBar、ProgressTimer和Slider实现示例
- cocos2d-x 粒子编辑器和使用
- lua 中处理cocos2dx 的button 事件
- Cocos2d-x3.0 捕Android菜单键和返回键
- 关于cocos2d-x中弧度和角度的转换问题
- cocos2d-x 3.2 物理小游戏教程2 block it 物理世界 墙壁
- 关于ToggleMenu触发器菜单