Cocos2d-x Scene Update

Update

You can override update method in your scene(cocos2d::Layer).

GameScene.h

class GameScene : public cocos2d::Layer
{
public:
   void update(float dt);
}

GameScene.cpp

void GameScene::update(float dt) {
   Size visibleSize = Director::getInstance()->getVisibleSize();
   Vec2 origin = Director::getInstance()->getVisibleOrigin();
   
   // Update position etc...  
}

Background scroll

This example is longitudinal scroll.

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

    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    // Create background(create 2 images, easy version)
    for (int i=0; i < 2; i++) {
    	backgroundSpriteArray[i] = Sprite::create("space.png");
    	backgroundSpriteArray[i]->setPosition(Point(visibleSize.width / 2, (-1 * visibleSize.height * i) + visibleSize.height / 2));
    	this->addChild(backgroundSpriteArray[i], -1);
    }
}

void GameScene::update(float dt) {
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();

	// Update background(height scroll)
	for (int i=0; i < 2; i++) {
		if (backgroundSpriteArray[i]->getPosition().y >= visibleSize.height + (visibleSize.height /2) - 1) {
			backgroundSpriteArray[i]->setPosition(Point( (visibleSize.width / 2) + origin.x, (-1 * visibleSize.height) + (visibleSize.height / 2)));
		}
	}

	for (int i=0; i < 2; i++) {
		backgroundSpriteArray[i]->setPosition(Point(backgroundSpriteArray[i]->getPosition().x, backgroundSpriteArray[i]->getPosition().y + (0.75 * visibleSize.height * dt)));
	}
}

Position update and enemy emerge

We can separate position update and emerge feature.
Add additional schedule method in init and implement enemy manager.
We have items in header std::vector items;

bool GameScene::init()
{
   // General Update
   this->scheduleUpdate();

   // Update enemy
   this->schedule(schedule_selector(GameScreen::enemy), 1.0); // 1.0 is interval

   return true;
}

General update

for (int i=0; i < items.size(); i++) {
   items[i]->setPosition(Point(items[i]->getPosition().x, items[i]->getPosition().y + (0.75 * visibleSize.height * dt)));

   // If the asteroid is out of display, delete
   if ( items[i]->getPosition().y > visibleSize.height * 2) {
      this->removeChild(items[i]);
      items.erase(items.begin() + i);
   }
}

Emerge

void GameScene::emerge(float dt) {
   Size visibleSize = Director::getInstance()->getVisibleSize();
   Vec2 origin = Director::getInstance()->getVisibleOrigin();
   int index = (arc4random() % 3) + 1;
   Sprite *tempE = Sprite::create("enemy.png");

   int xRandomPosition = (arc4random() % (int)(visibleSize.width - (tempE->getContentSize().width / 2))) + (tempE->getContentSize().width / 2);
	tempE->setPosition(Point(xRandomPosition + origin.x, -tempE->getContentSize().height + origin.y));
	items.push_back(tempE);
	this->addChild(items[items.size()-1], -1);
}