Cocos2d-X 背景层循环运动效果的具体实现

一、纵向

1、头文件中:

#include <iostream>

#include "cocos2d.h"

#include "Scene.h"

USING_NS_CC;


class SpRunAction:publicCCLayer

{

public:

    virtual bool init();

    CREATE_FUNC(SpRunAction);

    SCENE_FUNC(SpRunAction);

    

    CCSprite *bg1;

    CCSprite *bg2;

    void update(float dt);

};

2、实现文件中:

#include "SpRunAction.h"


bool SpRunAction::init()

{

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

//背景1

bg1 =CCSprite::create("mineBG2.png");

bg1->setPosition(ccp(winSize.width/2,winSize.height/2));

this->addChild(bg1);

   

//背景2

bg2 =CCSprite::create("mineBG2.png");

bg2->setPosition(ccp(winSize.width/2bg1->getContentSize().height+winSize.height/2));

this->addChild(bg2);

    

    

    this->scheduleUpdate();

   


    return true;

}


void SpRunAction:: update(float dt)

{

    int posX1 = bg1->getPositionY();

int posX2 = bg2->getPositionY();

    

posX1 -= 2;

posX2 -= 2;

    

CCSize mapSize = bg1->getContentSize();

    

if(posX1 < -mapSize.height/2)

    {

posX1 = mapSize.height + mapSize.height/2;

posX2 = mapSize.height/2;

}

if(posX2 < -mapSize.height/2)

    {

posX2 = mapSize.height + mapSize.height/2;

posX1 = mapSize.height/2;

}

bg1->setPositionY(posX1);

bg2->setPositionY(posX2);

}

二、横向

void addBack()

{

    //添加两张背景

    bg1 = CCSprite::create(Start_bg);

    bg1->setPosition(ccp(size.width/2,size.height/2));

    this->addChild(bg1);

    

    bg2 = CCSprite::create(Start_bg);

    bg2->setPosition(ccp(size.width/2+size.width,size.height/2));

    this->addChild(bg2);

    

    //背景移动

    this->schedule(schedule_selector(StartScene::movingBG), 0.1);

}

//实现背景的移动效果

void StartScene::movingBG()

{

    if (bg1->getPositionX() == size.width/2)

    {

        if (bg2->getPositionX() == -size.width/2)

        {

            bg2->setPosition(ccp(size.width/2+size.width,size.height/2));

        }

        

        CCMoveTo *moveTo1 = CCMoveTo::create(10.0f, ccp(-size.width/2, size.height/2));

        CCMoveTo *moveTo2 = CCMoveTo::create(10.0f, ccp(size.width/2, size.height/2));

        bg1->stopAllActions();

        bg2->stopAllActions();

        bg1->runAction(moveTo1);

        bg2->runAction(moveTo2);

    }

    

    if (bg1->getPositionX() == -size.width/2)

    {

        CCMoveTo *moveTo1 = CCMoveTo::create(10.0f, ccp(-size.width/2, size.height/2));

        CCMoveTo *moveTo2 = CCMoveTo::create(10.0f, ccp(size.width/2, size.height/2));

        bg1->setPosition(ccp(size.width/2+size.width,size.height/2));

        bg1->stopAllActions();

        bg2->stopAllActions();

        bg1->runAction(moveTo2);

        bg2->runAction(moveTo1);

    }

}




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值