大家都在热火朝天的使用Cocos2d-x引擎做游戏开发,那么大家不妨把过程中解决的关键问题记录在这里,做一个分享!
1、在Android平台下打开网页
1.1修改项目工程源文件
在你的项目工程源文件中(比如AboutScene.cpp)开头加入如下代码
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include "platform/android/jni/JniHelper.h" #include <android/log.h> #endif
后在你所想进行打开网页操作的地方加入如下{#if...#endif}部分的代码。笔者放在了About类的一个回调函数里。将能实现点击相应按钮,调用该回调函数,打开网页。
void About::contactCallback(CCObject* pSender) { #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //定义Jni函数信息结构体 JniMethodInfo minfo; bool isHave = JniHelper::getStaticMethodInfo(minfo,"org/cocos2dx/lib/Cocos2dxActivity","openUrl", "()V"); if (isHave) { minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID); } #endif
}
这里主要说下getStaticMethodInfo。
第二个参数,是类名,第三个参数是函数名(该类和函数将在1.2中出现)第四个参数表示该函数没有返回值。
可参见http://blog.csdn.net/xiaominghimi/article/details/7602984
1.2修改java源文件
在proj.androidsrcorgcocos2dxlib中找到Cocos2dxActivity.java文件。在文件中加入以下代码
public static void openUrl( ) { Uri uri = Uri.parse(http://www.cnblogs.com/z-xml");
Intent it = new Intent(Intent.ACTION_VIEW,uri);
sContext.startActivity(it);
}
其中 sContext指this。可在该java文件的protected void onCreate()方法里看到:sContext = this;如果你的是其他名字,做相应修改即可。
这样就成功了!
事实上,这就是在cocos2d-x里调用android响应的代码案例,不单单只是打开网页。
若要调android里的静态方法,将JniHelper::getStaticMethodInfo改为JniHelper::getMethodInfo即可(即去掉"static")。
责任编辑:李孟
2 截屏
在Cocos2d-x中实现截屏通常使用CCRenderTexture。
CCRenderTexture可以创建一张空白的画纸,然后使用begin()方法开始记录,其他的CCNode通过visit()方法在画纸上留下当前自己的痕迹,CCRenderTexture使用end()方法停止记录。下面的代码将生成screenShot.png,并提示"screenShot Succeed!"。图片文件生成你工程的rescourse里。
CCSize size = CCDirector::sharedDirector()->getWinSize(); CCRenderTexture* screen = CCRenderTexture::create(size.width, size.height); CCScene* temp = CCDirector::sharedDirector()->getRunningScene(); screen->begin(); temp->visit(); screen->end(); if(screen->saveToFile("screenShot.png")) { CCMessageBox("screenShot Succeed!", "Hit"); }
CC_SAFE_DELETE(screen);
责任编辑:李孟