热门IT资讯网

cocos2dx实战篇——《萝莉快跑》学习心得

发表于:2024-11-25 作者:热门IT资讯网编辑
编辑最后更新 2024年11月25日,【唠叨】源码教程请移步:http://blog.csdn.net/iamlazybone/article/details/19612941感谢懒骨头提供了这么多的Demo教程,对于初学者的我而言,帮助

【唠叨】

源码教程请移步:http://blog.csdn.net/iamlazybone/article/details/19612941

感谢懒骨头提供了这么多的Demo教程,对于初学者的我而言,帮助真的十分大。

注:本节仅仅记录博主自身学习《萝莉快跑》的心得体会。


【游戏截图】




【学习心得】


1、游戏主场景分层

如果将所有的元素全部都写在一个Game类里面,会很混乱,且改动也很麻烦。

所以应该对游戏的元素进行分层,如:背景层、人物层、怪物层、道具层等。

然后再将所有的层放入Game场景中,组合成完整的游戏。

(1)人物层:GameHero.h

(2)道具层:GameStar.h

(3)分数层:GameMark.h

(4)地图层:GameMap.h


2、更换CCMenuItemImage的图片

//        sp->setNormalImage(CCSprite::create("sound-off-A.png"));   //正常图片        sp->setSelectedImage(CCSprite::create("sound-off-B.png")); //选中时图片//


3、精灵背景更换

//        jump = CCTextureCache::sharedTextureCache()->addImage("s_jump.png"); //跳        luoli->setTexture(jump);//


4、跑动作动画

使用Animation/Animate动画动作。

//        CCAnimation* anrun = CCAnimation::create();                anrun->addSpriteFrameWithFileName("s_1.png");        anrun->addSpriteFrameWithFileName("s_2.png");        anrun->addSpriteFrameWithFileName("s_3.png");        anrun->addSpriteFrameWithFileName("s_4.png");        anrun->addSpriteFrameWithFileName("s_5.png");        anrun->addSpriteFrameWithFileName("s_6.png");        anrun->addSpriteFrameWithFileName("s_7.png");        anrun->addSpriteFrameWithFileName("s_8.png");                anrun->setDelayPerUnit(0.1f);         //帧间隔        anrun->setRestoreOriginalFrame(true); //是否返回初始帧                CCRepeatForever* acrun = CCRepeatForever::create( CCAnimate::create(anrun) );        luoli->runAction(acrun);//


5、Game里地图层的sp元素的坐标

假设:bg1和sp都是以中心为锚点的,AnchorPoint(0.5,0.5),且sp为bg1的子节点。

要想知道sp元素在屏幕上的坐标,就需要知道bg1在屏幕上的坐标,以及sp相对bg1的坐标。

因为sp设置的setPosition是相对其父节点bg1的坐标,而不是在屏幕上的实际坐标

//        //1.获得地图层坐标,p1是相对Game的坐标        CCPoint p1 = gamemap->getPosition();                //2.获得sp坐标,psp是相对gamemap的坐标        CCPoint psp = (gamemap->sp)->getPosition();                //3.计算sp在Game中的坐标        CCPoint pt = ccp(                (p1.x - gamemap->getContentSize().width/2)  + psp.x ,                (p2.y - gamemap->getContentSize().height/2) + psp.y );//


6、背景滚动

使用两张背景图片,从右到左滚动,超出屏幕就从新设置位置,继续滚动。

屏幕大小:480 X 320。

//        //背景1        bg1 = CCSprite::create("back_1.png");        bg1->setPosition(ccp(240,160));        this->addChild(bg1);        //背景2        bg2 = CCSprite::create("back_1.png");        bg2->setPosition(ccp(720,160));        this->addChild(bg2);                void GameMap::update(float dt)        {                //向左移动2个像素                bg1->setPosition(bg1->getPosition() - ccp(2, 0));                bg2->setPosition(bg2->getPosition() - ccp(2, 0));                //超出屏幕,设置坐标,重新滚动                if (bg1->getPositionX() <= -240) {                        bg1->setPosition(ccp(720, 160));                        //重新加载背景上的道具                        resetStar(star1);                 }                if (bg2->getPositionX() <= -240) {                        bg2->setPosition(ccp(720, 160));                        //重新加载背景上的道具                        resetStar(star2);                }        }//



0