CCRenderTexture 的 renderTextureWithWidth 无法在 cocos2d v3.2.1+ 中编译

CCRenderTexture's renderTextureWithWidth fails to compile in cocos2d v3.2.1+

我正在尝试使用 cocos2d 截取当前场景的屏幕截图。从 this answer to a previous question 开始,我将其翻译成 Swift,得到了这个:

func takeScreenshot() -> UIImage {
    CCDirector.sharedDirector().nextDeltaTimeZero = true

    let viewSize: CGSize = CCDirector.sharedDirector().viewSize()
    let renderTexture: CCRenderTexture = CCRenderTexture.renderTextureWithWidth(viewSize.width, height: viewSize.height)

    renderTexture.begin()
    CCDirector.sharedDirector().runningScene.visit()
    renderTexture.end()

    return renderTexture.getUIImage()
}

但是,我在以下位置遇到编译器错误:

let renderTexture: CCRenderTexture = CCRenderTexture.renderTextureWithWidth(viewSize.width, height: viewSize.height)

它说 "cannot invoke 'renderTextureWithWidth' with an argument list of type '(CGFloat, height: CGFloat)'"。

我检查了 CCRenderTexture.h 文件,它说:

+(instancetype)renderTextureWithWidth:(int)w height:(int)h;

我尝试将 viewSize.widthviewSize.height 类型转换为 Int,但它仍然再次出现相同的 "cannot invoke" 错误。

有谁知道为什么会这样以及如何解决?

这些类型转换可能很棘手。但是,如果您使用默认的 Swift 构造函数 CCRenderTexture(width: Int32, height: Int32) 而不是 objective-c 工厂方法(您尝试使用的方法),自动完成将帮助您解决问题。您需要转换为 Int32 .