LoginSignup
0
1

More than 5 years have passed since last update.

指定したopacityに徐々に変化させる

Last updated at Posted at 2014-02-07

この記事はまったく使えません!ごめんなさい

なぜなら、CCFadeToってのがちゃんとあるから

こっ恥ずかしすぎて消えたい気分です。。。
CCFadeInToとかCCFadeOutToとかって考えてたけど
そりゃ考えると名前的にはFadeToですね…

自分への戒めとして、記事自体は残しておきます。。


cocos2d-x ハージョンは2.2.1の話

問題背景

nodeを徐々に表示させる手法のひとつにCCFadeInがありますよね
毎度結構使う機能なんですが…
常日頃思うことがありました
これつかうとゼロかイチかっていうね
opacityが0から255っていう変化しかできないんですよね

いやいや0から150ぐらいにしたいですよっていう変化をしたい時には使えない
いままではそういうことを実現しようとおもったら、最初っから透過処理を加えた画像を用意して、CCFadeInを使っていました。
が、今回、それのパターンが多いかつある程度ランダムで決めたいっていうのがあって、
予め画像を用意するのが困難

という問題が発生しました

対応方法

CCFadeInを継承してCCFadeInToなるものを作って解消することに

以下はそのコード

CCFadeInTo.h

#include "cocos2d.h"

class CCFadeInTo : public cocos2d::CCFadeIn
{

public:
    CCFadeInTo();
    virtual ~CCFadeInTo();

    virtual void update(float time);
    virtual bool initWithDuration(float d, int toOpacity);
    static CCFadeInTo* create(float duration, int opacity);

protected:

private:

    int m_toOpacity;

};

CCFadeInTo.m

#include "CCFadeInTo.h"

USING_NS_CC;
using namespace std;

CCFadeInTo::CCFadeInTo()
{

}

CCFadeInTo::~CCFadeInTo()
{

}


CCFadeInTo* CCFadeInTo::create(float duration, int opacity)
{
    CCFadeInTo* pAction = new CCFadeInTo();

    pAction->initWithDuration(duration, opacity);
    pAction->autorelease();

    return pAction;
}


bool CCFadeInTo::initWithDuration(float d, int toOpacity)
{
    if (! CCActionInterval::initWithDuration(d)) {
        return false;
    }

    m_toOpacity = toOpacity;

    return true;
}

void CCFadeInTo::update(float time)
{
    CCRGBAProtocol *pRGBAProtocol = dynamic_cast<CCRGBAProtocol*>(m_pTarget);
    if (pRGBAProtocol)
    {
        pRGBAProtocol->setOpacity((GLubyte)(m_toOpacity * time));
    }
}


使い方

特段難しいことはなく、いつもの感じです(笑)

使ってみるよ!

CCSprite* hoge = CCSprite::create("hoge.png");
hoge->setVisible(false);
hoge->setOpacity(0);
this->addChild(hoge);

// 1秒かけてopacityを150まで変化させる
CCFadeInTo* fadeInTo = CCFadeInTo::create(1.f, 150);

hoge->runAction(CCSequence::create(CCShow::create(), fadeInto, NULL));

これで今のところ期待している挙動になってます
どうぞ参考にしてみてください〜

なにかあればコメント頂けると幸いですm(_ _)m

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1