生活随笔
收集整理的這篇文章主要介紹了
【cocos2d-x】游戏构成要素③----游戏关卡的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
到目前為止,我們討論了多個場景和多個層的應用。現在我們來討論關卡。
?
大家應該對關卡的概念都很熟悉,所以我不在這里做解釋了。設計關卡的難點是決定用什么樣的方式來設計基于關卡的游戲。
在Cocos2d-x中個關卡都使用一個場景,或者在同一個場景里設置多個層作為關卡。選擇哪種方式取決于關卡在你游戲中的作用。
No.1?每一個關卡都使用一個場景
| ?? 最直接的方法是每一個關卡都使用一個單獨的場景。你可以為每一個關卡創建一個新的場景類(Scene class),或者通過把關卡號碼或其它與關卡相關的信息傳遞給一個通用的關卡場景類(LevelScene class)用于加載正確的關卡數據。 ? 這個方法很適合每個關卡之間沒有多大關系,關卡可以清晰地分開的情況。你可能需要保存玩家的得分和當前剩余的生命數,除此之外不需要再保存其它的信息了。這種情況下的用戶界面可能是靜態的,或者最多只有一個暫停按鈕。 |
No.2?同一個場景里設置多個層作為關卡
| ??如果你有一個復雜的用戶界面,并且在關卡轉換時不允許重置游戲場景的話,你就需要在同一個場景里用不同的層來加載和顯示不同的關卡。在轉換關卡時,你可能會將游戲角色和其它的游戲物體保持在同一個位置。 ? 你可能使用幾個變量來保存當前的游戲狀態信息和用戶界面設置信息,比如說倉庫里的物品。如果你使用多個場景作為關卡的話,在轉換關卡的時候,你就需要做很多工作來保存和重置游戲設置,還有重置所有的視覺元素。 ? 這個方式很適合物品尋找類或者冒險類游戲,因為玩家需要在不同的房間之間移動。特別是你想在替換關卡內容的過程中使用動畫的情況下。 |
?
CCLayerMultiplex?
CCLayerMultiplex類可被用于這種方式中。它可以同時包含多個節點,但是任意時間里只有一個節點是有效的。但是唯一的缺點是你不能在層之間使用過渡效果。因為任意時間里只能有一個層是可視的,所以任何過渡效果都是不可能發生的。
CCLayerMultiplex?*multiplex=CCLayerMultiplex::layerWithLayers(layer1,layer2,NULL);??????????multiplex->switchTo(1);??????????multiplex->switchToAndReleaseMe(1);?
CCLayerColor
CCLayerColor類可用于改變背景顏色
CCLayerColor?*layercolor=CCLayerColor::layerWithColor(ccc4(225,0,225,255));?this->addChild(layercolor,0);?
? 如果你熟悉OpenGL的話,你可能會覺得沒有必要為了改變背景顏色而添加一個單獨的層。你可以使用以下OpenGL代碼得到相同的效果:
glClearColor(255,0,255,255);?
| ?但是如果你在場景中使用了過渡效果的話,你最好先在游戲里測試一下上述OpenGL代碼,因為glClearColor對場景過渡效果會產生不好的影響。 |
?
一些很酷的CCNode類
?
以下我會介紹四個基于CCNode可以滿足特定要求的類。它們是:
CCProgressTimer,
CCParallaxNode,
CCMotionStreak。
CCProgressTimer進度條
CCSize?size?=?CCDirector::sharedDirector()->getWinSize();?????????middle?=?CCProgressTimer::create(CCSprite::create("time.png"));?????????????middle->setType(kCCProgressTimerTypeRadial);?????????????????middle->setMidpoint(ccp(0,0));??????????????????middle->setPercentage(proportion);?????????middle->setPosition(ccp(size.width/2,size.height/2));?????????addChild(middle);??????????????????scheduleUpdate();? | ?進度條有一個缺點:它不會自己更新自己。你必須經常更新進度條的百分比數值來顯示進度. |
Update方法代碼:
void?MyScene::update(ccTime?time)?{?????proportion++;?????middle->setPercentage(proportion);?????if?(proportion?>=?100)?????????proportion=?0;?}? ?CCParallaxNode 視差視圖
?“視差”(Parallaxing)是2D游戲中通過讓不同層上的圖片用不同的速度移動,來創造視覺深度的方法。前景的圖片移動的比背景圖片要快。cocos2d-x有一個特殊的節點用于實現這個效果
?
bool?ParallaxScreen::init()?{?????bool?bRet?=?false;?????do?{??????????CCSize?size?=?CCDirector::sharedDirector()->getWinSize();?????????node?=?CCParallaxNode::create();?????????this->addChild(node);?????????CCSprite?*sprite1?=?CCSprite::create("parallax/parallax1.png");?????????CCSprite?*sprite2?=?CCSprite::create("parallax/parallax2.png");???????????????????CCPoint?speed1?=?CCPointMake(0.5,0.5);?????????CCPoint?speed2?=?CCPointMake(0.1,0.1);??????????node->addChild(sprite1,?1,?speed1,?CCPointMake(0,0));?????????node->addChild(sprite2,?2,?speed2,?CCPointMake(0,size.width/2));??????????this->scheduleUpdate();?????????bRet?=?true;?????}?while?(0);?????return?bRet;?}??void?ParallaxScreen::update(ccTime?time)?{??????CCSize?size?=?CCDirector::sharedDirector()->getWinSize();?????CCPoint?backgroundScrollVert?=?CCPointMake(1000,0);?????node->setPosition(?????????????ccpAdd(node->getPosition(),?ccpMult(backgroundScrollVert,?time)));?????if?(node->getPosition().x?>?size.width*4)?{?????????node->setPosition(CCPointMake(0,node->getPosition().y));?????}?}? ?CCMotionStreak(拖尾效果)
?
bool?Ribbon::init()?{?????bool?bRet?=?false;?????do?{?????????CCSize?size=CCDirector::sharedDirector()->getWinSize();?用于決定元素消失的速度,它的值越小,元素消失的越快????????????motion?=?CCMotionStreak::create(3,?3,?32,?ccc3(255,?255,?0),?"s1.png");?????????motion->setPosition(CCPointMake(size.width/2,size.height/2));?????????this->addChild(motion);?????????this->setTouchEnabled(true);?????????bRet?=?true;?????}?while?(0);?????return?bRet;?}??void?Ribbon::registerWithTouchDispatcher(){?CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);?}??void?Ribbon::ccTouchMoved(CCTouch?*pTouch,?CCEvent?*pEvent)?{?????CCLog("拖動");?????CCPoint?point?=?pTouch->getLocation();???????point=CCDirector::sharedDirector()->convertToUI(point);?????motion->setPosition(point);?}??????
接下來一章將深入的講解CCsprite(精靈),如有問題,請提出
本教程根據Cocos2d教程翻譯過來
使用的cocos2d-x版本為2.02
?
轉載于:https://blog.51cto.com/gejw0623/990492
總結
以上是生活随笔為你收集整理的【cocos2d-x】游戏构成要素③----游戏关卡的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。