原创作品,转载请注明:http://blog.csdn.net/ymook/article/details/19996061
在游戏开发中,游戏截屏,并一键分享的功能是必不可少的,这样,更多的玩家就会聚集过来。
这篇文章是我接着上一篇文章cocos2dx 植入友盟分享功能 来写的。不过很多东西也是可以独立使用的,现在给大家分享一下。
首先,我描述一下这个截屏并分享的整体流程:
1.点击截屏按钮调用截屏函数getScreenPic();
在win32平台下,其截屏图片保存的路径是Debug.win32文件夹下。
在Android平台下,其保存路径是data文件夹下(该路径是私有路径)。
2.将该图片从data私有路径下拷贝出来放到我们自己指定的SD卡路径;
3.将图片从SD卡路径中提取出来上传到网络服务器,以便于公众浏览。
详细说明:
1.getScreenPic()写法如下(Native层):
void FruitGameLayer::getScreenPic()
{
CCSize size = CCDirector::sharedDirector()->getWinSize();
//定义一个屏幕大小的渲染纹理
CCRenderTexture* pScreen = CCRenderTexture::create(size.width,size.height, kCCTexture2DPixelFormat_RGBA8888);
//获得当前的场景指针
CCScene* pCurScene = CCDirector::sharedDirector()->getRunningScene();
//渲染纹理开始捕捉
pScreen->begin();
//当前场景参与绘制
pCurScene->visit();
//结束捕捉
pScreen->end();
//保存为png
pScreen->saveToFile("gameScreen.png", kCCImageFormatJPEG);
CC_SAFE_DELETE(pScreen);
}
2.拷贝图片代码如下(Java层):
//拷贝截图
public static String CopyGameScreenPic(String picName) throws IOException
{
boolean sdExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if(sdExist)
{
//设置图片拷贝后的存储路径
String pathString=Environment.getExternalStorageDirectory()+"/mnt/sdcard/" ;
File f1=new File(pathString);
if(!f1.exists())
{
f1.mkdirs();
}
String path = pathString+picName;
File share = getContext().getFilesDir().listFiles()[0];
InputStream is = new FileInputStream(share);
FileOutputStream os = new FileOutputStream(path);
byte[] buffer = new byte[1024];
int count = 0;
while ((count = is.read(buffer)) > 0) {
os.write(buffer, 0, count);
}
is.close();
os.close();
return path;
}
return "/mnt/sdcard/";
}
3.好了,我们就可以用各种第三方接口从SD中提取出图片并分享了这些接口的实现方式可以通过使用新浪微博、微信、腾讯微博、QQ空间等平台的开发API。而我使用的友盟社会化组件是集成了上述所有平台SDK的一个SDK,非常方便,具体实现方法,参照上篇 cocos2dx
植入友盟分享功能 。至此cocos2dx游戏开发中,截屏并在各大平台的分享功能实现过程已完成,谢谢大家的关注!