Сохранение скриншота в CoCos2d V2.xx с использованием CCRenderTexture - PullRequest
3 голосов
/ 24 марта 2012

Я знаю, что есть довольно много примеров того, как сохранить экран в CoCos2d с помощью CCRenderTexture, но они просто не работают для меня.Я написал приложение для раскрашивания для клиента, и они, конечно, хотят иметь возможность сохранять изображения.Я перепробовал кучу разных способов и потерял кучу примеров, но безрезультатно.В последнее время я получаю эту ошибку:

2012-03-24 13: 07: 03.749 Книжка-раскраска [823: 1be03] cocos2d: ОШИБКА: не удалось сохранить файл: / Users / macbookpro /Библиотека / Поддержка приложений / iPhone Simulator / 5.1 / Приложения / 76F88977-AD3A-47B8-8026-C9324BB3636E / Документы / Пользователи / macbookpro / Библиотека / Поддержка приложений / iPhone Simulator / 5.1 / Приложения / 76F88977-AD3A-47B8-8026-C9324BB3636E /Documents / testimagename.png на диск

Я получаю нечто подобное при запуске с устройства.Вот мой код скриншота:

- (void) takeScreenShot
  {
     NSString* file = @"testimagename.png";

NSArray* paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* screenshotPath = [documentsDirectory 
                            stringByAppendingPathComponent:file];

[CCDirector sharedDirector].nextDeltaTimeZero = YES;

CGSize winSize = [CCDirector sharedDirector].winSize;
CCRenderTexture* rtx = 
[CCRenderTexture renderTextureWithWidth:winSize.width 
                                 height:winSize.height];
[rtx begin];
[Page visit];
[rtx end];

// save as file as PNG
[rtx  saveToFile:screenshotPath
         format:kCCImageFormatPNG];
 }

Возможно, это что-то простое, но это сводило меня с ума в течение нескольких дней!Пожалуйста, переполнение стека, заставь меня чувствовать себя глупо и исправь мою проблему!

1 Ответ

6 голосов
/ 25 марта 2012

Проблема, с которой я столкнулся, сводится к определению пути.Вам не нужно указывать путь к разделу «Документы» устройства, Cocos2D по умолчанию сохраняет его в «Документы».Я собрал все это вместе (обратите внимание, что LearnCocos2D большое спасибо за часть кода, который я использую), чтобы сохранить нужные мне слои, а затем сохранить экран в библиотеке фотографий.

- (void) takeScreenShot
{

//name the file we want to save in documents
NSString* file = @"//imageforphotolib.png";

//get the path to the Documents directory
NSArray* paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
NSString* screenshotPath = [documentsDirectory 
                            stringByAppendingPathComponent:file];

[CCDirector sharedDirector].nextDeltaTimeZero = YES;

//creating standard screensize variable
CGSize winSize = [CCDirector sharedDirector].winSize;

//we're using transparancies as the images, 
//so we load this white page to give a backdrop
CCSprite *whitePage = [CCSprite spriteWithFile:@"whitePage.png"];
whitePage.position = ccp(winSize.width/2, winSize.height/2);

//create a render texture to hold our images
CCRenderTexture* rtx = 
[CCRenderTexture renderTextureWithWidth:winSize.width 
                                 height:winSize.height];
[rtx begin];// open the texture
[whitePage visit];//add a white page to the background
[Page visit];//put in the background image
[target visit];//put in the coloring layer
[rtx end];//close the texture

// save as file as PNG
[rtx  saveToFile:@"imageforphotolib.png"
         format:kCCImageFormatPNG];

//get the screenshot as raw data
NSData *data = [NSData dataWithContentsOfFile:screenshotPath];
//create an image from the raw data
UIImage *img = [UIImage imageWithData:data];
//save the image to the users Photo Library
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);
 }
...