Search code examples
androidcocos2d-android

Adding Endless parallax background in cocos2d android


I am working on CoCos2d with android.I want to add an endless scrolling background to my Screen by using CCParallaxNode. I am able to add background and move it but after the completion of that move action the screen goes black. Can someone help me out?

My code is

CCParallaxNode parallaxNode;
CCSprite spacedust1;
CCSprite spacedust2;
CCSprite planetsunrise;
CCSprite galaxy;
CCSprite spacialanomaly;
CCSprite spacialanomaly2;

parallaxNode = CCParallaxNode.node();

    spacedust1 = CCSprite.sprite("bg_front_spacedust.png");
    spacedust2 = CCSprite.sprite("bg_front_spacedust.png");
    planetsunrise = CCSprite.sprite("bg_planetsunrise.png");
    galaxy = CCSprite.sprite("bg_galaxy.png");
    spacialanomaly = CCSprite.sprite("bg_spacialanomaly.png");
    spacialanomaly2 = CCSprite.sprite("bg_spacialanomaly2.png");
    // 3) Determine relative movement speeds for space dust and background
    // CGPoint cgPoint = CGPoint.ccp(0.1, 0.1);

    CGPoint dustSpeed = CGPoint.ccp(10, 10);
    CGPoint bgSpeed = CGPoint.ccp(5, 5);
    // CGPoint bgSpeed = ccp(0.05, 0.05);

    parallaxNode.addChild(spacedust1, 0, dustSpeed.x, dustSpeed.y, 0,
            winSize.height / 2);
    parallaxNode.addChild(spacedust2, 0, dustSpeed.x, dustSpeed.y,
            spacedust1.getContentSize().width, winSize.height / 2);
    parallaxNode.addChild(galaxy, -1, bgSpeed.x, bgSpeed.y, 0, 10);
    parallaxNode.addChild(planetsunrise, -1, bgSpeed.x, bgSpeed.y, 600, 5);
    parallaxNode
            .addChild(spacialanomaly, -1, bgSpeed.x, bgSpeed.y, 900, 20);
    parallaxNode.addChild(spacialanomaly2, -1, bgSpeed.x, bgSpeed.y, 1500,
            30);
    CCIntervalAction go = CCMoveBy.action(4, CGPoint.ccp(winSize.width, 0));
    CCIntervalAction goBack = go.reverse();
    CCIntervalAction seq = CCSequence.actions(go, goBack);
    CCRepeatForever action = CCRepeatForever.action(goBack);
    parallaxNode.runAction(action);

Solution

  • I see that since not a single answer worked for you. I will provide a simple code which will help you for your parralax scrolling background.

    Add this code in your game layers constructor

    background1 = CCSprite.sprite("bg2.png");
    background2 = CCSprite.sprite("bg2.png");
    
    background1.setPosition(CGPoint.ccp(winSize.width*0.5f,winSize.height*0.5f));
    addChild(background1);
    
    background2.setPosition(CGPoint.ccp(winSize.width+winSize.width*0.5f,winSize.height*0.5f));
    addChild(background2);
    

    and a scroll method which is scheduled every millisecond. add this in constructor

    this.schedule("scroll");
    

    and now the scroll method.

    public void scroll(float dt) {
    
        CGPoint pos1 = background1.getPosition();
        CGPoint pos2 = background2.getPosition();
    
        pos1.x -= 5.0f;
        pos2.x -= 5.0f;
    
        if(pos1.x <=-(winSize.width*0.5f) )
        {
            pos1.x = pos2.x + winSize.width;
        }
    
        if(pos2.x <=-(winSize.width*0.5f) )
        {
            pos2.x = pos1.x + winSize.width;
        }
    
        background1.setPosition(pos1);
        background2.setPosition(pos2);
    
    
    }
    

    mark my answer if it worked.