首页 » 技术分享 » 横屏小游戏--萝莉快跑源码分析二

横屏小游戏--萝莉快跑源码分析二

 

游戏地图:

 

init()函数初始化游戏地图

    map = new GameObjMap();
    map->setAnchorPoint(ccp(0,1));
    map->setPosition(ccp(0,size.height));
    addChild(map,0);

进入GameObjMap类ccp文件,地图初始化过程
雾和山水图组成一张游戏背景,创建2张

    CCSprite *bg1 = CCSprite::create("back_1.png");//雾
    bg1->setScale(0.5);
    bg1->setAnchorPoint(ccp(0,1));
    bg1->setPosition(ccp(0, size.height) );
    this->addChild(bg1,0,0);

    CCSprite *bgdi1 = CCSprite::create("back_5.png"); //山水
    bgdi1->setAnchorPoint(ccp(0,0));
    bgdi1->setPosition(ccp(0,-124) );
    bg1->addChild(bgdi1,1);

    CCSprite *bg2 = CCSprite::create("back_1.png");
    bg2->setScale(0.5);
    bg2->setAnchorPoint(ccp(0,1));
    bg2->setPosition(ccp(size.width, size.height) );
    this->addChild(bg2,0,1);

    CCSprite *bgdi2 = CCSprite::create("back_5.png");
    bgdi2->setAnchorPoint(ccp(0,0));
    bgdi2->setPosition(ccp(0,-124) );
    bg2->addChild(bgdi2,1);

两张图滚动效果

    bg1->runAction(CCSequence::create(CCMoveBy::create(10,ccp(-480,0)),CCCallFuncN::create(this, callfuncN_selector(GameObjMap::bg1change)),NULL));//第1张先往左移动
    bg2->runAction(CCSequence::create(CCMoveBy::create(20,ccp(-960,0)),CCCallFuncN::create(this, callfuncN_selector(GameObjMap::bg2change)),NULL));//第2张跟上,这样避免出现黑框
 //移出屏幕重设位置,继续左移,无限循环
void GameObjMap::bg1change(CCNode* pSender){

    CCSprite *bg = (CCSprite *)this->getChildByTag(0);
    bg->setPosition(ccp(480,320));
    bg->runAction(CCSequence::create(CCMoveBy::create(20,ccp(-960,0)),CCCallFuncN::create(this, callfuncN_selector(GameObjMap::bg1change)),NULL));
    for(int i = 0;i < 5;i ++){//显示星星
        ((GameObjStar *)stars1->objectAtIndex(i))->set_visable(true);
    }
}
//移出屏幕重设位置,继续左移,无限循环
void GameObjMap::bg2change(CCNode* pSender){
    CCSprite *bg = (CCSprite *)this->getChildByTag(1);
    bg->setPosition(ccp(480,320));
    bg->runAction(CCSequence::create(CCMoveBy::create(20,ccp(-960,0)),CCCallFuncN::create(this, callfuncN_selector(GameObjMap::bg2change)),NULL));
    for(int i = 0;i < 5;i ++){
        ((GameObjStar *)stars2->objectAtIndex(i))->set_visable(true);
    }
}

在地图上添加星星

	stars1 = CCArray::createWithCapacity(5);
    stars2 = CCArray::createWithCapacity(5);
    for(int i = 0;i < 5;i ++){
        GameObjStar *obj = new GameObjStar();
        obj->setPosition(ccp(172 + 192 * i,350));
        stars1->addObject(obj);
        bg1->addChild(obj,3);
        obj = new GameObjStar();
        obj->setPosition(ccp(172 + 192 * i,350));
        stars2->addObject(obj);
        bg2->addChild(obj,3);
    }
    stars1->retain();
    stars2->retain();

 

在地图上添加林木、植物、道路,至此地图初始化完毕

for(int i = 0;i < 7;i ++){
        CCSprite *roaddi;
        CCSprite *plant;
        if(bg1shu[i] != -1){
           CCSprite *road;
           switch(bg1shu[i]){
            case 0:
                plant = CCSprite::create("back_2.png");
                plant->setAnchorPoint(ccp(0.5,0));
                plant->setPosition( ccp(128 * i + 64,117) );
                bg1->addChild(plant,1);
                road = CCSprite::create("road_2.png");
                road->setAnchorPoint(ccp(0,0));
                road->setPosition( ccp(128 * i,0) );
                roaddi = CCSprite::create("road_3.png");
                roaddi->setAnchorPoint(ccp(0,1));
                roaddi->setPosition( ccp(128 * i,0) );
                bg1->addChild(roaddi,1);
                break;
            case 1:
                road = CCSprite::create("road_1.png");
                road->setAnchorPoint(ccp(0,0));
                road->setPosition( ccp(26 + 128 * i,0) );
                roaddi = CCSprite::create("road_4.png");
                
                roaddi->setAnchorPoint(ccp(0,1));
                roaddi->setPosition( ccp(26 + 128 * i,0) );
                bg1->addChild(roaddi,1);
                break;
            case 2:
                plant = CCSprite::create("enemy.png");
                plant->setAnchorPoint(ccp(0.5,0));
                plant->setPosition( ccp(128 * i + 64,112) );
                bg1->addChild(plant,1);
                road = CCSprite::create("road_1.png");
                road->setFlipX(true);
                road->setAnchorPoint(ccp(0,0));
                road->setPosition( ccp(128 * i,0) );
                roaddi = CCSprite::create("road_4.png");
                roaddi->setFlipX(true);
                roaddi->setAnchorPoint(ccp(0,1));
                roaddi->setPosition( ccp(128 * i,0) );
                bg1->addChild(roaddi,1);
                break;
            case 3:
                road = CCSprite::create("road_5.png");
                road->setAnchorPoint(ccp(0,0));
                road->setPosition( ccp(128 * i,0) );
                break;
            
           }
           bg1->addChild(road,1);
        }
		
        if(bg2shu[i] != -1){
           CCSprite *road1;
           switch(bg2shu[i]){
            case 0:
                road1 = CCSprite::create("road_2.png");
                road1->setAnchorPoint(ccp(0,0));
                road1->setPosition( ccp(128 * i,0) );
                roaddi = CCSprite::create("road_3.png");
                
                roaddi->setAnchorPoint(ccp(0,1));
                roaddi->setPosition( ccp(128 * i,0) );
                bg2->addChild(roaddi,1);
                break;
            case 1:
                plant = CCSprite::create("back_3.png");
                plant->setAnchorPoint(ccp(0.5,0));
                plant->setPosition( ccp(128 * i + 128,117) );
                bg2->addChild(plant,1);
                road1 = CCSprite::create("road_1.png");
                road1->setAnchorPoint(ccp(0,0));
                road1->setPosition( ccp(26 + 128 * i,0) );
                roaddi = CCSprite::create("road_4.png");
                
                roaddi->setAnchorPoint(ccp(0,1));
                roaddi->setPosition( ccp(26 + 128 * i,0) );
                bg2->addChild(roaddi,1);
                break;
            case 2:
                road1 = CCSprite::create("road_1.png");
                road1->setFlipX(true);
                road1->setAnchorPoint(ccp(0,0));
                road1->setPosition( ccp(128 * i,0) );
                roaddi = CCSprite::create("road_4.png");
                roaddi->setFlipX(true);
                roaddi->setAnchorPoint(ccp(0,1));
                roaddi->setPosition( ccp(128 * i,0) );
                bg2->addChild(roaddi,1);
                break;
            case 3:
                road1 = CCSprite::create("road_5.png");
                road1->setAnchorPoint(ccp(0,0));
                road1->setPosition( ccp(128 * i,0) );
                break;
                
            }
            bg2->addChild(road1,1);
        }
    }
    state = 0;
}

 

转载自原文链接, 如需删除请联系管理员。

原文链接:横屏小游戏--萝莉快跑源码分析二,转载请注明来源!

0