gpt4 book ai didi

ios - 使用 CCClippingNode 的屏幕截图 - cocos2d-iphone-2.1-beta4

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:29 25 4
gpt4 key购买 nike

我正在测试 Cocos2d 2.1 beta4 CCClippingNode 中添加的新裁剪节点。但是,我无法使用以下方法截取剪切节点的屏幕截图。最终结果是未剪切的图像。您可以在此处找到新版本:http://www.cocos2d-iphone.org/download

+ (UIImage *) screenshotNode:(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];
}

最佳答案

建议的解决方案

以下代码似乎适用于 Cocos2d v2.1:

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

CGSize winSize = [CCDirector sharedDirector].winSize;

CCRenderTexture * rtx =
[CCRenderTexture renderTextureWithWidth:winSize.width
height:winSize.height
pixelFormat:kCCTexture2DPixelFormat_RGBA8888
depthStencilFormat:GL_DEPTH24_STENCIL8];

[rtx beginWithClear:0 g:0 b:0 a:0 depth:1.0f];
[startNode visit];
[rtx end];

return [rtx getUIImage];
}

解释

要使原始代码正常工作,必须进行以下两项更改:

  1. 指定depthStencilFormat创建 CCRenderTexture 时的参数目的。默认情况下,CCRenderTexture不创建深度/模板缓冲区。
    • depthStencilFormat参数必须设置为GL_DEPTH24_STENCIL8为了创建模板缓冲区,至少在 v2.1 中是这样。 CCRenderTexture初始化代码专门检查此值。
  2. 调用beginWithClear使用 1.0f 的深度值而不是 begin .
    • 看来只是调用begin从不清除深度缓冲区。里面CCClippingNode , 使用 glDepthMask(GL_FALSE) 禁止写入深度缓冲区, 但深度测试仍处于启用状态。由于深度缓冲区从未被清除,我怀疑深度测试失败,导致模板从未被绘制。

此外,CCGLView必须使用 depthFormat:GL_DEPTH24_STENCIL8_OES 创建为了 CCClippingNode首先使用模板。

关于ios - 使用 CCClippingNode 的屏幕截图 - cocos2d-iphone-2.1-beta4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14292373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com