mirror of https://github.com/axmolengine/axmol.git
Fix polygon sprite bug of resetting flip and color information in setSpriteFrame. (#18085)
This commit is contained in:
parent
cdac595a68
commit
681e9aa752
|
@ -1433,23 +1433,7 @@ void Sprite::setFlippedX(bool flippedX)
|
||||||
if (_flippedX != flippedX)
|
if (_flippedX != flippedX)
|
||||||
{
|
{
|
||||||
_flippedX = flippedX;
|
_flippedX = flippedX;
|
||||||
|
flipX();
|
||||||
if (_renderMode == RenderMode::QUAD_BATCHNODE)
|
|
||||||
{
|
|
||||||
setDirty(true);
|
|
||||||
}
|
|
||||||
else if (_renderMode == RenderMode::POLYGON)
|
|
||||||
{
|
|
||||||
for (ssize_t i = 0; i < _polyInfo.triangles.vertCount; i++) {
|
|
||||||
auto& v = _polyInfo.triangles.verts[i].vertices;
|
|
||||||
v.x = _contentSize.width -v.x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// RenderMode:: Quad or Slice9
|
|
||||||
updatePoly();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1463,23 +1447,7 @@ void Sprite::setFlippedY(bool flippedY)
|
||||||
if (_flippedY != flippedY)
|
if (_flippedY != flippedY)
|
||||||
{
|
{
|
||||||
_flippedY = flippedY;
|
_flippedY = flippedY;
|
||||||
|
flipY();
|
||||||
if (_renderMode == RenderMode::QUAD_BATCHNODE)
|
|
||||||
{
|
|
||||||
setDirty(true);
|
|
||||||
}
|
|
||||||
else if (_renderMode == RenderMode::POLYGON)
|
|
||||||
{
|
|
||||||
for (ssize_t i = 0; i < _polyInfo.triangles.vertCount; i++) {
|
|
||||||
auto& v = _polyInfo.triangles.verts[i].vertices;
|
|
||||||
v.y = _contentSize.height -v.y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// RenderMode:: Quad or Slice9
|
|
||||||
updatePoly();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1488,6 +1456,44 @@ bool Sprite::isFlippedY(void) const
|
||||||
return _flippedY;
|
return _flippedY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sprite::flipX() {
|
||||||
|
if (_renderMode == RenderMode::QUAD_BATCHNODE)
|
||||||
|
{
|
||||||
|
setDirty(true);
|
||||||
|
}
|
||||||
|
else if (_renderMode == RenderMode::POLYGON)
|
||||||
|
{
|
||||||
|
for (ssize_t i = 0; i < _polyInfo.triangles.vertCount; i++) {
|
||||||
|
auto& v = _polyInfo.triangles.verts[i].vertices;
|
||||||
|
v.x = _contentSize.width -v.x;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// RenderMode:: Quad or Slice9
|
||||||
|
updatePoly();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sprite::flipY() {
|
||||||
|
if (_renderMode == RenderMode::QUAD_BATCHNODE)
|
||||||
|
{
|
||||||
|
setDirty(true);
|
||||||
|
}
|
||||||
|
else if (_renderMode == RenderMode::POLYGON)
|
||||||
|
{
|
||||||
|
for (ssize_t i = 0; i < _polyInfo.triangles.vertCount; i++) {
|
||||||
|
auto& v = _polyInfo.triangles.verts[i].vertices;
|
||||||
|
v.y = _contentSize.height -v.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// RenderMode:: Quad or Slice9
|
||||||
|
updatePoly();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// MARK: RGBA protocol
|
// MARK: RGBA protocol
|
||||||
//
|
//
|
||||||
|
@ -1591,6 +1597,9 @@ void Sprite::setSpriteFrame(SpriteFrame *spriteFrame)
|
||||||
{
|
{
|
||||||
_polyInfo = spriteFrame->getPolygonInfo();
|
_polyInfo = spriteFrame->getPolygonInfo();
|
||||||
_renderMode = RenderMode::POLYGON;
|
_renderMode = RenderMode::POLYGON;
|
||||||
|
if (_flippedX) flipX();
|
||||||
|
if (_flippedY) flipY();
|
||||||
|
updateColor();
|
||||||
}
|
}
|
||||||
if (spriteFrame->hasAnchorPoint())
|
if (spriteFrame->hasAnchorPoint())
|
||||||
{
|
{
|
||||||
|
|
|
@ -661,6 +661,9 @@ protected:
|
||||||
void updatePoly();
|
void updatePoly();
|
||||||
void updateStretchFactor();
|
void updateStretchFactor();
|
||||||
|
|
||||||
|
virtual void flipX();
|
||||||
|
virtual void flipY();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Data used when the sprite is rendered using a SpriteSheet
|
// Data used when the sprite is rendered using a SpriteSheet
|
||||||
//
|
//
|
||||||
|
|
Loading…
Reference in New Issue