[已解决]对一个sprite设置setPositionZ后,图片在还在视口内确消失了

auto spritetet = Sprite::create(“maps/map_0_bg_0.png”);
this->addChild(spritetet, 1000, “test”);
spritetet->setPositionZ(300.f);
auto actionMove = MoveBy::create(5.f, Vec2(640.f, 0.f));
spritetet->runAction(actionMove);
图片在移动过程,还没有移出屏幕却突然消失了,这是什么原因

跟踪代码是发现cRenderer::checkVisibility返回的是false,但是对这个矩阵啊什么的不熟悉,不知道是哪步计算有问题,求指教啊

有人吗!!??,自己推测是应为z轴的改变,应该同时改变在窗口里sprite的显示size的大小,而Renderer::checkVisibility里检测用的size并没有改变,所以导致检测有偏差了,不知道对不对囧,要不模仿sprite3d的检测来改,把aabb长方体弄薄点?有空再试试。
自问自答真心high。。。。。。。

自己写个sprite,重载draw,修改检测checkVisibility的函数,用下面那个,当然仅对2d的sprite有用:
bool GLSprite::checkVisibility(const Mat4 &transform, const Size &size)
{
auto scene = Director::getInstance()->getRunningScene();

    //If draw to Rendertexture, return true directly.
    // only cull the default camera. The culling algorithm is valid for default camera.
    if (!scene || (scene && scene->getDefaultCamera() != Camera::getVisitingCamera()))
        return true;

    auto director = Director::getInstance();
    Rect visiableRect(director->getVisibleOrigin(), director->getVisibleSize());

    // transform center point to screen space
    float hSizeX = size.width / 2;
    float hSizeY = size.height / 2;
    Vec3 v3p(hSizeX, hSizeY, 0);
    transform.transformPoint(&v3p);
    Vec2 v2p = Camera::getVisitingCamera()->projectGL(v3p);

            //修改的size的大小
    auto eyesz = Camera::getVisitingCamera()->getPositionZ();
    auto scale = eyesz / (eyesz- v3p.z);
    hSizeX *= scale;
    hSizeY *= scale;

    // convert content size to world coordinates
    float wshw = std::max(fabsf(hSizeX * transform.m + hSizeY * transform.m), fabsf(hSizeX * transform.m - hSizeY * transform.m));
    float wshh = std::max(fabsf(hSizeX * transform.m + hSizeY * transform.m), fabsf(hSizeX * transform.m - hSizeY * transform.m));

    // enlarge visible rect half size in screen coord
    visiableRect.origin.x -= wshw;
    visiableRect.origin.y -= wshh;
    visiableRect.size.width += wshw * 2;
    visiableRect.size.height += wshh * 2;
    bool ret = visiableRect.containsPoint(v2p);
    return ret;
}

这个改法还是有问题的,没有考虑到3d旋转的情况,3d旋转后还是会有问题的