Merge pull request #5463 from andyque/refactor3877

closed #3877. make fadeIn and fadeOut behaviours correct
This commit is contained in:
James Chen 2014-02-27 21:49:38 +08:00
commit 4277509966
3 changed files with 109 additions and 68 deletions

View File

@ -1664,7 +1664,7 @@ FadeIn* FadeIn::create(float d)
{
FadeIn* action = new FadeIn();
action->initWithDuration(d);
action->initWithDuration(d,255.0f);
action->autorelease();
return action;
@ -1674,25 +1674,42 @@ FadeIn* FadeIn::clone() const
{
// no copy constructor
auto a = new FadeIn();
a->initWithDuration(_duration);
a->initWithDuration(_duration,255.0f);
a->autorelease();
return a;
}
void FadeIn::update(float time)
void FadeIn::setReverseAction(cocos2d::FadeTo *ac)
{
if (_target)
{
_target->setOpacity((GLubyte)(255 * time));
}
/*_target->setOpacity((GLubyte)(255 * time));*/
_reverseAction = ac;
}
ActionInterval* FadeIn::reverse() const
FadeTo* FadeIn::reverse() const
{
return FadeOut::create(_duration);
auto action = FadeOut::create(_duration);
action->setReverseAction(const_cast<FadeIn*>(this));
return action;
}
void FadeIn::startWithTarget(cocos2d::Node *target)
{
ActionInterval::startWithTarget(target);
if (nullptr != _reverseAction) {
this->_toOpacity = this->_reverseAction->_fromOpacity;
}else{
_toOpacity = 255.0f;
}
if (target) {
_fromOpacity = target->getOpacity();
}
}
//
// FadeOut
//
@ -1701,7 +1718,7 @@ FadeOut* FadeOut::create(float d)
{
FadeOut* action = new FadeOut();
action->initWithDuration(d);
action->initWithDuration(d,0.0f);
action->autorelease();
return action;
@ -1711,23 +1728,37 @@ FadeOut* FadeOut::clone() const
{
// no copy constructor
auto a = new FadeOut();
a->initWithDuration(_duration);
a->initWithDuration(_duration,0.0f);
a->autorelease();
return a;
}
void FadeOut::update(float time)
void FadeOut::startWithTarget(cocos2d::Node *target)
{
if (_target)
{
_target->setOpacity(GLubyte(255 * (1 - time)));
ActionInterval::startWithTarget(target);
if (nullptr != _reverseAction) {
_toOpacity = _reverseAction->_fromOpacity;
}else{
_toOpacity = 0.0f;
}
if (target) {
_fromOpacity = target->getOpacity();
}
/*_target->setOpacity(GLubyte(255 * (1 - time)));*/
}
ActionInterval* FadeOut::reverse() const
void FadeOut::setReverseAction(cocos2d::FadeTo *ac)
{
return FadeIn::create(_duration);
_reverseAction = ac;
}
FadeTo* FadeOut::reverse() const
{
auto action = FadeIn::create(_duration);
action->setReverseAction(const_cast<FadeOut*>(this));
return action;
}
//

View File

@ -707,53 +707,6 @@ private:
CC_DISALLOW_COPY_AND_ASSIGN(Blink);
};
/** @brief Fades In an object that implements the RGBAProtocol protocol. It modifies the opacity from 0 to 255.
The "reverse" of this action is FadeOut
*/
class CC_DLL FadeIn : public ActionInterval
{
public:
/** creates the action */
static FadeIn* create(float d);
//
// Overrides
//
virtual void update(float time) override;
virtual FadeIn* clone() const override;
virtual ActionInterval* reverse(void) const override;
protected:
FadeIn() {}
virtual ~FadeIn() {}
private:
CC_DISALLOW_COPY_AND_ASSIGN(FadeIn);
};
/** @brief Fades Out an object that implements the RGBAProtocol protocol. It modifies the opacity from 255 to 0.
The "reverse" of this action is FadeIn
*/
class CC_DLL FadeOut : public ActionInterval
{
public:
/** creates the action */
static FadeOut* create(float d);
//
// Overrides
//
virtual void update(float time) override;
virtual FadeOut* clone() const override;
virtual ActionInterval* reverse(void) const override;
protected:
FadeOut() {}
virtual ~FadeOut() {}
private:
CC_DISALLOW_COPY_AND_ASSIGN(FadeOut);
};
/** @brief Fades an object that implements the RGBAProtocol protocol. It modifies the opacity from the current value to a custom one.
@warning This action doesn't support "reverse"
@ -780,11 +733,64 @@ protected:
GLubyte _toOpacity;
GLubyte _fromOpacity;
friend class FadeOut;
friend class FadeIn;
private:
CC_DISALLOW_COPY_AND_ASSIGN(FadeTo);
};
/** @brief Fades In an object that implements the RGBAProtocol protocol. It modifies the opacity from 0 to 255.
The "reverse" of this action is FadeOut
*/
class CC_DLL FadeIn : public FadeTo
{
public:
/** creates the action */
static FadeIn* create(float d);
//
// Overrides
//
virtual void startWithTarget(Node *target) override;
virtual FadeIn* clone() const override;
virtual FadeTo* reverse(void) const override;
void setReverseAction(FadeTo* ac);
protected:
FadeIn():_reverseAction(nullptr) {}
virtual ~FadeIn() {}
private:
CC_DISALLOW_COPY_AND_ASSIGN(FadeIn);
FadeTo* _reverseAction;
};
/** @brief Fades Out an object that implements the RGBAProtocol protocol. It modifies the opacity from 255 to 0.
The "reverse" of this action is FadeIn
*/
class CC_DLL FadeOut : public FadeTo
{
public:
/** creates the action */
static FadeOut* create(float d);
//
// Overrides
//
virtual void startWithTarget(Node *target) override;
virtual FadeOut* clone() const override;
virtual FadeTo* reverse(void) const override;
void setReverseAction(FadeTo* ac);
protected:
FadeOut():_reverseAction(nullptr) {}
virtual ~FadeOut() {}
private:
CC_DISALLOW_COPY_AND_ASSIGN(FadeOut);
FadeTo* _reverseAction;
};
/** @brief Tints a Node that implements the NodeRGB protocol from current tint to a custom one.
@warning This action doesn't support "reverse"
@since v0.7.2

View File

@ -647,9 +647,13 @@ void ActionFade::onEnter()
auto action2 = FadeOut::create(1.0f);
auto action2Back = action2->reverse();
auto action2BackReverse = action2Back->reverse();
auto action2BackReverseReverse = action2BackReverse->reverse();
_tamara->setOpacity(122);
_tamara->runAction( Sequence::create( action1, action1Back, NULL));
_kathia->runAction( Sequence::create( action2, action2Back, NULL));
_kathia->setOpacity(122);
_kathia->runAction( Sequence::create( action2, action2Back,action2BackReverse,action2BackReverseReverse, NULL));
}
std::string ActionFade::subtitle() const