2016-10-11 1 views
0

Pour autant que je l'ai découvert, les cocos n'offrent pas un simple filtre comme AS3 par exemple.cocos2d-x v3 C++ Ombre portée cocos2d :: Sprite

Ma situation: Je souhaite ajouter une ombre en temps réel à un cocos2d :: Sprite.

Par exemple, je voudrais faire quelque chose comme ça (semblable à AS3):

auto mySprite = Sprite::createWithSpriteFrameName("myCharacter.png"); 

DropShadowFilter* dropShadow = new DropShadowFilter(); 
dropShadow->distance = 0; 
dropShadow->angle = 45; 
dropShadow->color = 0x333333; 
dropShadow->alpha = 1; 
dropShadow->blurX = 10; 
dropShadow->blurY = 10; 
dropShadow->strength = 1; 
dropShadow->quality = 15; 

mySprite->addFilter(dropShadow); 

Cela devrait ajouter une ombre à mon Sprite pour obtenir un résultat comme celui-ci: Adobe Drop Shadow Example

Pouvez-vous aide moi s'il te plait?

Répondre

0

Il n'y a pas de prise en charge intégrée des ombres sur Sprites dans Cocos2D-X. La meilleure option, en termes de performances, consisterait à placer déjà vos ombres dans vos images d'image-objet, au lieu de les calculer et de les dessiner dans le code.

Une autre option consiste à sous-classer Sprite et à remplacer la méthode draw afin que vous dupliquiez l'image-objet et que vous appliquiez vos effets et que vous les placiez sous l'original.

Une façon possible d'y parvenir est avec cet extrait de this thread on the Cocos forum. Je ne peux pas dire que je suis complètement ce que ce code fait avec les transformations GL, mais vous pouvez l'utiliser comme point de départ pour expérimenter.

void CMySprite::draw() 
{ 
    // is_shadow is true if this sprite is to be considered like a shadow sprite, false [email protected] 
    if (is_shadow) 
    { 
    ccBlendFunc blend; 
    // Change the default blending factors to this one. 
    blend.src = GL_SRC_ALPHA; 
    blend.dst = GL_ONE; 
    setBlendFunc(blend); 
    // Change the blending equation to thi in order to subtract from the values already written in the frame buffer 
    // the ones of the sprite. 
    glBlendEquationOES(GL_FUNC_REVERSE_SUBTRACT_OES); 
    } 

    CCSprite::draw(); 

    if (is_shadow) 
    { 
    // The default blending function of cocos2d-x is GL_FUNC_ADD. 
    glBlendEquationOES(GL_FUNC_ADD_OES);   
    } 
} 
+0

Merci entre. Je vérifierai. – GianaBro