Bug? on moving custom Camera in v3.4

Hello everyone,

When I created a new camera to follow player, this camera only render scene objects, I catch a bug:
the player object was running not smoothly, but like the gif shown somethimes on PC and frequently on Mobile,

And if I do not use the user camera, it’s all OK.

Here is the test code:

  1. create any new project in v3.x, change the default scripts like:
    HelloWorld.h

HelloWorld.cpp

Copying:
HelloWorld.h

void update(float dt);
private:
bool hasInited;
cocos2d::Sprite* player;
cocos2d::Camera* mainCam;

HelloWorld.cpp

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}

Size vSize = Director::getInstance()->getVisibleSize();

// set custom camera.
mainCam = Camera::createOrthographic(vSize.width, vSize.height, -10, 10);
mainCam->setCameraFlag(CameraFlag::USER1); // camera layer.
mainCam->setPosition(Vec2::ZERO);
this->addChild(mainCam);

// set player.
player = Sprite::create("CloseNormal.png");
player->setScale(3);
player->setPosition(200, 300);
this->addChild(player);

player->setCameraMask((unsigned short)CameraFlag::USER1);  // set mask.

// update.
scheduleUpdate();

hasInited = false;

return true;

}

void HelloWorld::update(float dt)
{
// camera follow smoothly.
float cameraTargetPosX = player->getPositionX() - 200;

Vec2 targetPos = Vec2(cameraTargetPosX, mainCam->getPositionY());

mainCam->setPosition( mainCam->getPosition().lerp(targetPos, 0.1) );

// move player(did not use physics)
if ( player->getPositionX() > 10000 ) {
    player->stopAllActions();
    player->setPositionX(200);
    
    mainCam->setPositionX(0);
    
    hasInited = false;
}

if ( hasInited == false ) {
    MoveBy* move = MoveBy::create(20, Vec2(12000, 0));
    
    player->runAction(Sequence::create(DelayTime::create(2), move, NULL));
    
    hasInited = true;
}

}

  1. compile and run to test.