CCNode-визит-функция, скопированная CCSprite получила темный край - PullRequest
0 голосов
/ 16 октября 2011

У меня есть вопрос о функции [посещение] CCNode

Исходное изображение хорошо с четкими контурами, ничего особенного, оно состоит из 5 листов-спрайтов внутри.

ЭКРАНCAPTURE:

http://farm7.static.flickr.com/6107/6248992365_eab5346264_o.png

Затем я хочу использовать [посещение CCNode], чтобы скопировать его.

А вот код

-(CCSprite *)flattenSprite:(CCSprite*)sprite textureSize:(float)textureSize {

    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
    [rt begin];

    // store the original sprite position
    CGPoint p=sprite.position;
    //set original sprite to a target point for open GL to "visit"
    sprite.position=ccp(textureSize/2,textureSize/2);
    // open GL visit
    [sprite visit];
    //original sprite return to original point
    sprite.position=p;

    [rt end];
    return [CCSprite spriteWithTexture:rt.sprite.texture];
}

с помощью этой функции я могу оптимизировать производительность приложения, ограничивая количество спрайтов, существующих на сцене, но у «скопированных спрайтов» есть темный край вокруг него.Это выглядит странно - особенно когда спрайты накладываются друг на друга.

Пожалуйста, скажите мне, есть ли у вас какие-либо подсказки / где-нибудь есть полезная информация об этой проблеме темного края

1 Ответ

0 голосов
/ 12 августа 2014
-(CCSprite *)flattenSprite:(CCSprite*)sprite textureSize:(float)textureSize {

    CCRenderTexture *rt = [CCRenderTexture renderTextureWithWidth:textureSize height:textureSize];
    [rt begin];

    // store the original sprite position
    CGPoint p=sprite.position;
    //set original sprite to a target point for open GL to "visit"
    sprite.position=ccp(textureSize/2,textureSize/2);
    // open GL visit
    [sprite visit];
    //original sprite return to original point
    sprite.position=p;

    [rt end];

    CCSprite *renderSprite = [CCSprite spriteWithTexture:rt.sprite.texture];
    //this will solve the dark edge problem
    [sprite setBlendFunc: (ccBlendFunc) { GL_ONE, GL_ONE_MINUS_SRC_ALPHA }];

    return renderSprite;
}
...