原創作品,轉載請注明: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游戲開發中,截屏並在各大平台的分享功能實現過程已完成,謝謝大家的關注!