void ClippingRectangleNode::onBeforeVisitScissor()
{
if (_clippingEnabled) {
glEnable(GL_SCISSOR_TEST);
float scaleX = _scaleX;
float scaleY = _scaleY;
Node *parent = this->getParent();
while (parent) {
scaleX *= parent->getScaleX();
scaleY *= parent->getScaleY();
parent = parent->getParent();
}
scaleX = scaleY = 1; //设置为1,不做缩放
const Point pos = convertToWorldSpace(Point(_clippingRegion.origin.x, _clippingRegion.origin.y));
GLView* glView = Director::getInstance()->getOpenGLView();
glView->setScissorInPoints(pos.x * scaleX,
pos.y * scaleY,
_clippingRegion.size.width * scaleX,
_clippingRegion.size.height * scaleY);
}
}
看代码setScissorInPoints做了缩放处理,结果导致当ClippingRectangleNode的父容器设置了scale(0.8f)后,裁剪区域错位;
我强制把scaleX = scaleY = 1;不做缩放,结果反而对了。
还请官方重视。