写了个测试代码:
1.任意新建一个3.x的工程,把HelloWorld的代码改成下面这样:
HelloWorld.h
在原来代码(CREATE_FUNC(HelloWorld);)后面添加
void update(float dt);
private:
bool hasInited;
cocos2d::Sprite* player;
cocos2d::Camera* mainCam;
HelloWorld.cpp
修改init()方法,如下:
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); // 摄像机照射的层//
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); // 显示到自定义摄像机下//
// update.
scheduleUpdate();
hasInited = false;
return true;
}
实现新加的update(float)方法,如下:
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;
}
}
- 编译测试即可。
PS: 背景是黑的没关系,那个关闭按钮(角色)在颤抖,就是我说的问题。