Cocos2d-X Backgrounds: Color, Gradiente, Imagen de fondo, Tiled...


Cocos2d es genial, y la versión Cocos2d-X es de mis favoritas. Pero a veces lo simple se complica.

Por ejemplo el fondo de una escena. ¿Cómo se pone de un color?:

  CCLayerColor *backgroundLayer = CCLayerColor::create(ccc4(255, 0, 0, 255));
  backgroundLayer->setZOrder(0);
  this->addChild(backgroundLayer);



¿Y un gradiente?:

  CCLayerGradient *backgroundLayer = CCLayerGradient::create(ccc4(255, 0, 0, 255), ccc4(0, 0, 255, 255));
  backgroundLayer->setZOrder(0);
  this->addChild(backgroundLayer);


¿Y un gradiente pero con otra dirección, por ejemplo diagonal?

  CCSize size = CCDirector::sharedDirector()->getWinSize();

  CCLayerGradient *backgroundLayer = CCLayerGradient::create(ccc4(255, 0, 0, 255), ccc4(0, 0, 255, 255), ccp(size.width/2, size.height/2));
  backgroundLayer->setZOrder(0);
  this->addChild(backgroundLayer);


¿Y una imagen de fondo?

  CCSprite *backgroundSprite = CCSprite::create("HelloWorld.png");
  backgroundSprite->setPosition(ccp(size.width/2, size.height/2));
  backgroundSprite->setZOrder(0);
  this->addChild(backgroundSprite);


Y para sacar nota: ¿Qué pasa si tengo una imagen que quiero que se repita en el eje X y el eje Y de forma automática ocupando toda la pantalla (y claro, que funcione no sólo en el tamaño de la pantalla del iPhone)?

    // ask director the window size
  CCSize size = CCDirector::sharedDirector()->getWinSize();

  CCRect rect(0, 0, size.width, size.height);
  CCSprite *backgroundSprite = CCSprite::create("WhereIsThatFly.png", rect);
  backgroundSprite->setPosition(ccp(size.width/2, size.height/2));
  backgroundSprite->setZOrder(0);
  ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
  backgroundSprite->getTexture()->setTexParameters(&params);
  this->addChild(backgroundSprite);


En este caso hay que tener cuidado el tamaño de la imagen, funcionará sin problemas si las longitudes (ancho y alto) en píxeles son potencia de dos (es decir 16, 32, 64, 128, 256...).

La imagen utilizada es el icono de nuestro último (¡y primer!) juego hasta la fecha (espero que cuando leáis esto haya alguno más) disponible en Google Play: ¿Dónde está la mosca? Actualmente estoy haciendo el port a Cocos2D-X.