2

OS X の Cocos2D 2.0 で次の警告が表示されます。

-[CCRenderTexture initWithWidth:height:pixelFormat:depthStencilFormat:] : cocos2d: 警告。CCRenderTexture は独自のスレッドで実行されています。このスレッドで OpenGL コンテキストが使用されていることを確認してください。

警告を引き起こしていると思われるコードは次のとおりです。

- (id) initWithObject: (CCNode *) object mask: (CCSprite *) mask {
    NSAssert(object != nil, @"Invalid sprite for object");
    NSAssert(mask != nil, @"Invalid sprite for mask");

    if((self = [super init])) {

        _objectSprite = object;

        _maskSprite = mask;

        // Set up the burn sprite that will "knock out" parts of the darkness layer depending on the alpha value of the pixels in the image.
        [_maskSprite setBlendFunc: (ccBlendFunc) { GL_ZERO, GL_ONE_MINUS_SRC_ALPHA }];

        // Get window size, we want masking over entire screen don't we?
        CGSize size = [[CCDirector sharedDirector] winSize];

        // Create point with middle of screen
        CGPoint screenMid = ccp(size.width * 0.5f, size.height * 0.5f);

        // Create the rendureTextures for the mask
        _masked = [CCRenderTexture renderTextureWithWidth: size.width height: size.height];

        [[_masked sprite] setBlendFunc: (ccBlendFunc) { GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA }];

        // Set render textures at middle of screen
        _masked.position = screenMid;

        // Add the masked object to the screen
        [self addChild: _masked];

        [[CCDirector sharedDirector] setAlphaBlending:YES];
    }

    return self;
}

助けてください、私はこれを理解できません。

4

1 に答える 1

1

ccConfig.hで、次の行を見つけます。

#define CC_DIRECTOR_MAC_THREAD CC_MAC_USE_DISPLAY_LINK_THREAD

ここで、スレッドの使用が定義されます。メイン スレッド オプション ( CC_MAC_USE_MAIN_THREAD) を使用するか、GCD を使用して、すべてのコードが実際に で実行されることを確認できます-[CCDirector runningThread]。これでかなり治ります。

于 2014-07-01T07:31:59.010 に答える