您好,登錄后才能下訂單哦!
【嘮叨】
源碼教程請移步: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); } } //
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。