Date: 2015/9/30 Cate: C++, cocos2d-x Tags:  

Flashでつくったアニメーションをcocos2d-x上で使うのに、Super Animation Converterを使っているのですが、これのSuperAnimNodeV2.hに対してsetOpacityや、FadeIn, FadeOutなどのアルファ値を変化させる処理を行っても反映されないんですね。

キャラの動きをFlashでつくってSuperAnimNodeV2としてcocos上で使っていて、ちょっとした演出をcocos側で加えるときにアルファ値を変化させたくなったのでメモ。

SuperAnimNodeV2.cppのL570あたりで

        V3F_C4B_T2F_Quad aOriginQuad = aSprite->mQuad;
        aSprite->mQuad = sAnimObjDrawnInfo.mTransform.mMatrix * aSprite->mQuad;
        Color4B aColor = Color4B(sAnimObjDrawnInfo.mColor.mRed, sAnimObjDrawnInfo.mColor.mGreen, sAnimObjDrawnInfo.mColor.mBlue, sAnimObjDrawnInfo.mColor.mAlpha);
        // ここから自分で追加した
        aColor.r *= _displayedOpacity/255.0f;
        aColor.g *= _displayedOpacity/255.0f;
        aColor.b *= _displayedOpacity/255.0f;
        aColor.a *= _displayedOpacity/255.0f;
        // ここまで
        aSprite->mQuad.bl.colors = aColor;
        aSprite->mQuad.br.colors = aColor;
        aSprite->mQuad.tl.colors = aColor;
        aSprite->mQuad.tr.colors = aColor;
        if (mIsFlipX) {
            float aWidthinPixel = getContentSize().width * CC_CONTENT_SCALE_FACTOR();
            aSprite->mQuad.bl.vertices.x = aWidthinPixel - aSprite->mQuad.bl.vertices.x;
            aSprite->mQuad.br.vertices.x = aWidthinPixel - aSprite->mQuad.br.vertices.x;
            aSprite->mQuad.tl.vertices.x = aWidthinPixel - aSprite->mQuad.tl.vertices.x;
            aSprite->mQuad.tr.vertices.x = aWidthinPixel - aSprite->mQuad.tr.vertices.x;
        }

↑のように_displayedOpacityをaColorに反映させるように修正すると、setOpacityとかが効くようになりました。

Leave a Reply