7

シーンのスクリーンショットを撮ってファイルに保存するアプリケーションがあります。私はこれを機能させており、アプリケーションはストアにあります。今日、iOS 6 をダウンロードしましたが、使用している方法が機能しなくなりました。私はそれを機能させるために私が知っているすべてをテストし、グーグルで調べて、これを見つけました:

http://www.cocos2d-iphone.org/forum/topic/37809?replies=22#post-180983

ユーザーはこれが iOS 5 で動作していることに同意しているようですが、私はこれを iOS 6 でテストしましたが、黒いスクリーンショットが生成されます。

私は Cocos2D の専門家ではないので、この人のコードのどこが悪いのか正確には言えません。作者は github にサンプル プロジェクトを持っており、彼のプロジェクトでさえ iOS 6 で黒いスクリーンショットを生成しています。

手がかりはありますか?ありがとう。

ありがとう

4

4 に答える 4

33

GitHub バージョンが何をするのかはわかりませんが、このコードはスクリーンショットを撮ります。iOS 6 でテストしたところ、問題なく動作します。

+(UIImage*) screenshotWithStartNode:(CCNode*)startNode
{
    [CCDirector sharedDirector].nextDeltaTimeZero = YES;

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

    return [rtx getUIImage];
}

このように呼び出すことができます

CCScene *scene = [[CCDirector sharedDirector] runningScene];
CCNode *n = [scene.children objectAtIndex:0];
UIImage *img = [AppController screenshotWithStartNode:n];
于 2012-09-13T22:19:45.633 に答える
2

これは Cocos2d V3 で機能します。

+(UIImage*) screenshotWithStartNode:(CCNode*)startNode
{
    [CCDirector sharedDirector].nextDeltaTimeZero = YES;

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

    return [rtx getUIImage];
}
于 2014-05-12T18:32:25.840 に答える
0

上記の 2 つの回答は Cocos2d 3.2.1 では機能しませんでした

Cocos2d 3.2.1 +のソリューションは次のとおりです

-(UIImage*) takePresentScreenshot
{
    [CCDirector sharedDirector].nextDeltaTimeZero = YES;

    CGSize size = [[CCDirector sharedDirector] viewSize];
    CCRenderTexture *renderTxture = [CCRenderTexture renderTextureWithWidth:size.width
                                                                  height:size.height];
    [renderTxture begin];
    [[[CCDirector sharedDirector] runningScene] visit];
    [renderTxture end];

    return [renderTxture getUIImage];
}

UIImage* screenshot = [self takePresentScreenshot];
于 2014-09-24T19:54:39.133 に答える