У меня была такая же проблема и я разобрался.
Попробуй это. Объявите фон и смещение в качестве члена:
CCSprite _bg;
float _bgOffset;
В вашей сцене конструктор:
CGSize winSize = CCDirector.sharedDirector().displaySize();
_bg = CCSprite.sprite("yourbg.png"); // needs to be square, i.e. 256x256
_bg.setTextureRect(0, 0, winSize.width, winSize.height, false);
_bg.getTexture().setTexParameters(GL10.GL_LINEAR, GL10.GL_LINEAR, GL10.GL_REPEAT,
GL10.GL_REPEAT);
_bg.setAnchorPoint(CGPoint.zero());
this.addChild(_bg);
И в вашем методе обновления (float dt):
if (_bgOffset > 2000000000)
_bgOffset = 0; // don't want problems, do we?
_bgOffset += dt * PIXELS_PER_SECOND; // this can be dynamic if you want
_bg.setTextureRect(0, _bgOffset, _bg.getTextureRect().size.width,
_bg.getTextureRect().size.height, false);
См. "Повторение фона" в http://www.raywenderlich.com/3857/how-to-create-dynamic-textures-with-ccrendertexture для кода Objective C
Если вам нужно пойти в обе стороны, возможно, вы могли бы начать с ненулевого _bgOffset
и посмотреть, работает ли это.
Надеюсь, это кому-нибудь поможет!