mirror of https://github.com/axmolengine/axmol.git
issue #3162: Add layer cascade color and cascade opacity test, fix bugs
This commit is contained in:
parent
a71394b122
commit
463ae20ce6
|
@ -1441,7 +1441,8 @@ void Node::setOpacity(GLubyte opacity)
|
||||||
void Node::updateDisplayedOpacity(GLubyte parentOpacity)
|
void Node::updateDisplayedOpacity(GLubyte parentOpacity)
|
||||||
{
|
{
|
||||||
_displayedOpacity = _realOpacity * parentOpacity/255.0;
|
_displayedOpacity = _realOpacity * parentOpacity/255.0;
|
||||||
|
updateColor();
|
||||||
|
|
||||||
if (_cascadeOpacityEnabled)
|
if (_cascadeOpacityEnabled)
|
||||||
{
|
{
|
||||||
_children.forEach([this](Node* child){
|
_children.forEach([this](Node* child){
|
||||||
|
@ -1457,7 +1458,7 @@ bool Node::isCascadeOpacityEnabled(void) const
|
||||||
|
|
||||||
void Node::setCascadeOpacityEnabled(bool cascadeOpacityEnabled)
|
void Node::setCascadeOpacityEnabled(bool cascadeOpacityEnabled)
|
||||||
{
|
{
|
||||||
if (_cascadeColorEnabled == cascadeOpacityEnabled)
|
if (_cascadeOpacityEnabled == cascadeOpacityEnabled)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1491,7 +1492,7 @@ void Node::disableCascadeOpacity()
|
||||||
_displayedOpacity = _realOpacity;
|
_displayedOpacity = _realOpacity;
|
||||||
|
|
||||||
_children.forEach([this](Node* child){
|
_children.forEach([this](Node* child){
|
||||||
child->disableCascadeOpacity();
|
child->updateDisplayedOpacity(255);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1517,6 +1518,7 @@ void Node::updateDisplayedColor(const Color3B& parentColor)
|
||||||
_displayedColor.r = _realColor.r * parentColor.r/255.0;
|
_displayedColor.r = _realColor.r * parentColor.r/255.0;
|
||||||
_displayedColor.g = _realColor.g * parentColor.g/255.0;
|
_displayedColor.g = _realColor.g * parentColor.g/255.0;
|
||||||
_displayedColor.b = _realColor.b * parentColor.b/255.0;
|
_displayedColor.b = _realColor.b * parentColor.b/255.0;
|
||||||
|
updateColor();
|
||||||
|
|
||||||
if (_cascadeColorEnabled)
|
if (_cascadeColorEnabled)
|
||||||
{
|
{
|
||||||
|
@ -1564,7 +1566,7 @@ void Node::updateCascadeColor()
|
||||||
void Node::disableCascadeColor()
|
void Node::disableCascadeColor()
|
||||||
{
|
{
|
||||||
_children.forEach([this](Node* child){
|
_children.forEach([this](Node* child){
|
||||||
child->disableCascadeColor();
|
child->updateDisplayedColor(Color3B::WHITE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1428,6 +1428,7 @@ protected:
|
||||||
virtual void disableCascadeOpacity();
|
virtual void disableCascadeOpacity();
|
||||||
virtual void updateCascadeColor();
|
virtual void updateCascadeColor();
|
||||||
virtual void disableCascadeColor();
|
virtual void disableCascadeColor();
|
||||||
|
virtual void updateColor() {}
|
||||||
|
|
||||||
|
|
||||||
float _rotationX; ///< rotation angle on x-axis
|
float _rotationX; ///< rotation angle on x-axis
|
||||||
|
@ -1501,11 +1502,11 @@ protected:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// opacity controls
|
// opacity controls
|
||||||
GLubyte _displayedOpacity;
|
GLubyte _displayedOpacity;
|
||||||
GLubyte _realOpacity;
|
GLubyte _realOpacity;
|
||||||
Color3B _displayedColor;
|
Color3B _displayedColor;
|
||||||
Color3B _realColor;
|
Color3B _realColor;
|
||||||
bool _cascadeColorEnabled;
|
bool _cascadeColorEnabled;
|
||||||
bool _cascadeOpacityEnabled;
|
bool _cascadeOpacityEnabled;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -22,7 +22,9 @@ static std::function<Layer*()> createFunctions[] = {
|
||||||
CL(LayerIgnoreAnchorPointPos),
|
CL(LayerIgnoreAnchorPointPos),
|
||||||
CL(LayerIgnoreAnchorPointRot),
|
CL(LayerIgnoreAnchorPointRot),
|
||||||
CL(LayerIgnoreAnchorPointScale),
|
CL(LayerIgnoreAnchorPointScale),
|
||||||
CL(LayerExtendedBlendOpacityTest)
|
CL(LayerExtendedBlendOpacityTest),
|
||||||
|
CL(LayerBug3162A),
|
||||||
|
CL(LayerBug3162B),
|
||||||
};
|
};
|
||||||
|
|
||||||
static int sceneIdx=-1;
|
static int sceneIdx=-1;
|
||||||
|
@ -863,3 +865,91 @@ string LayerExtendedBlendOpacityTest::subtitle()
|
||||||
return "You should see 3 layers";
|
return "You should see 3 layers";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LayerBug3162A
|
||||||
|
void LayerBug3162A::onEnter()
|
||||||
|
{
|
||||||
|
LayerTest::onEnter();
|
||||||
|
|
||||||
|
Size size = VisibleRect::getVisibleRect().size;
|
||||||
|
size.width = size.width / 2;
|
||||||
|
size.height = size.height / 3;
|
||||||
|
Color4B color[3] = {Color4B(255, 0, 0, 255), Color4B(0, 255, 0, 255), Color4B(0, 0, 255, 255)};
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i)
|
||||||
|
{
|
||||||
|
_layer[i] = LayerColor::create(color[i]);
|
||||||
|
_layer[i]->setContentSize(size);
|
||||||
|
_layer[i]->setPosition(Point(size.width/2, size.height/2) - Point(20, 20));
|
||||||
|
_layer[i]->setOpacity(150);
|
||||||
|
_layer[i]->setCascadeOpacityEnabled(true);
|
||||||
|
if (i > 0)
|
||||||
|
{
|
||||||
|
_layer[i-1]->addChild(_layer[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->addChild(_layer[0]);
|
||||||
|
|
||||||
|
schedule(schedule_selector(LayerBug3162A::step), 0.5, kRepeatForever, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LayerBug3162A::step(float dt)
|
||||||
|
{
|
||||||
|
_layer[0]->setCascadeOpacityEnabled(!_layer[0]->isCascadeOpacityEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string LayerBug3162A::title()
|
||||||
|
{
|
||||||
|
return "Bug 3162 red layer cascade opacity eable/disable";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string LayerBug3162A::subtitle()
|
||||||
|
{
|
||||||
|
return "g and b layer opacity is effected/diseffected with r layer";
|
||||||
|
}
|
||||||
|
|
||||||
|
// LayerBug3162B
|
||||||
|
void LayerBug3162B::onEnter()
|
||||||
|
{
|
||||||
|
LayerTest::onEnter();
|
||||||
|
|
||||||
|
Size size = VisibleRect::getVisibleRect().size;
|
||||||
|
size.width = size.width / 2;
|
||||||
|
size.height = size.height / 3;
|
||||||
|
Color4B color[3] = {Color4B(200, 0, 0, 255), Color4B(150, 0, 0, 255), Color4B(100, 0, 0, 255)};
|
||||||
|
|
||||||
|
for (int i = 0; i < 3; ++i)
|
||||||
|
{
|
||||||
|
_layer[i] = LayerColor::create(color[i]);
|
||||||
|
_layer[i]->setContentSize(size);
|
||||||
|
_layer[i]->setPosition(Point(size.width/2, size.height/2) - Point(20, 20));
|
||||||
|
//_layer[i]->setOpacity(150);
|
||||||
|
if (i > 0)
|
||||||
|
{
|
||||||
|
_layer[i-1]->addChild(_layer[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->addChild(_layer[0]);
|
||||||
|
|
||||||
|
_layer[0]->setCascadeColorEnabled(true);
|
||||||
|
_layer[1]->setCascadeColorEnabled(true);
|
||||||
|
_layer[2]->setCascadeColorEnabled(true);
|
||||||
|
|
||||||
|
schedule(schedule_selector(LayerBug3162B::step), 0.5, kRepeatForever, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void LayerBug3162B::step(float dt)
|
||||||
|
{
|
||||||
|
_layer[0]->setCascadeColorEnabled(!_layer[0]->isCascadeColorEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string LayerBug3162B::title()
|
||||||
|
{
|
||||||
|
return "Bug 3162 bottom layer cascade opacity eable/disable";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string LayerBug3162B::subtitle()
|
||||||
|
{
|
||||||
|
return "u and m layer opacity is effected/diseffected with b layer";
|
||||||
|
}
|
||||||
|
|
|
@ -174,6 +174,34 @@ public:
|
||||||
virtual std::string subtitle();
|
virtual std::string subtitle();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class LayerBug3162A : public LayerTest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CREATE_FUNC(LayerBug3162A);
|
||||||
|
virtual void onEnter();
|
||||||
|
virtual std::string title();
|
||||||
|
virtual std::string subtitle();
|
||||||
|
|
||||||
|
void step(float dt);
|
||||||
|
|
||||||
|
private:
|
||||||
|
LayerColor* _layer[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
class LayerBug3162B : public LayerTest
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CREATE_FUNC(LayerBug3162B);
|
||||||
|
virtual void onEnter();
|
||||||
|
virtual std::string title();
|
||||||
|
virtual std::string subtitle();
|
||||||
|
|
||||||
|
void step(float dt);
|
||||||
|
|
||||||
|
private:
|
||||||
|
LayerColor* _layer[3];
|
||||||
|
};
|
||||||
|
|
||||||
class LayerTestScene : public TestScene
|
class LayerTestScene : public TestScene
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Reference in New Issue