日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cocos2d-x游戏开发(二)开始菜单续

發(fā)布時間:2024/4/11 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2d-x游戏开发(二)开始菜单续 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

歡迎轉(zhuǎn)載:http://blog.csdn.net/fylz1125/article/details/8492497


上一篇文章已經(jīng)實現(xiàn)了MoonWarriors開始菜單的大部分元素,還差一個運動的飛船和一個點擊newGame的特效和音效。

1.飛船

[cpp]?view plaincopyprint?
  • //?ships??
  • ????CCTexture2D?*textCache?=?CCTextureCache::sharedTextureCache()->addImage(s_ship01);??
  • ????m_ship?=?CCSprite::createWithTexture(textCache,?CCRectMake(0,?45,?60,?38));??
  • ????this->addChild(m_ship,?0,?4);??
  • ????CCPoint?position?=?ccp(CCRANDOM_0_1()?*?winSize.width,?0);??
  • ????m_ship->setPosition(position);??
  • ????m_ship->runAction(CCMoveBy::create(2,?ccp(CCRANDOM_0_1()?*?winSize.width,?position.y?+?winSize.height?+?100)));??
  • 這里的飛船就是一個sprite,后面我會建一個飛船的類,但這個只是一個Sprite。

    緩存飛船圖片,create一個飛船,添加,設置位置,執(zhí)行動作。

    在設置飛船位置的時候注意,每次飛船出來位置都是隨機的。引擎封裝了一個隨機函數(shù)CCRANDON_0_1(),這個是隨機一個0到1之間的float數(shù)。用一個MoveBy來實現(xiàn)飛船移動,同樣移動的目標點也有一定的隨機性。

    你以為這樣就完了嗎,那你就錯了。所有的這些元素都在init()函數(shù)完成的,即使runAction了,也就只是執(zhí)行一次。

    為了看到不斷有飛船在屏幕上飛,需要加點料。這里用schedule()函數(shù)來不斷更新。這個函數(shù)就是任務調(diào)度,每隔dt調(diào)用一次回調(diào)函數(shù),這里就是每0.1秒執(zhí)行update函數(shù)

    [cpp]?view plaincopyprint?
  • this->schedule(schedule_selector(StartMenu::update),?0.1);??
  • 然后看update的實現(xiàn) [cpp]?view plaincopyprint?
  • if?(m_ship->getPosition().y?>?480)?{??
  • ????????CCPoint?pos?=?ccp(CCRANDOM_0_1()?*?winSize.width,?10);??
  • ????????m_ship->setPosition(pos);??
  • ????????m_ship->runAction(CCMoveBy::create(floor(5?*?CCRANDOM_0_1()),?ccp(CCRANDOM_0_1()?*?winSize.width,?pos.y?+?480)));??
  • ??????????
  • ????}??
  • 飛船飛出屏幕后就重新設置其位置再執(zhí)行動作。

    2.音效

    這個很簡單,直接用了聲音引擎

    [cpp]?view plaincopyprint?
  • SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.7);??
  • SimpleAudioEngine::sharedEngine()->playBackgroundMusic(s_mainMainMusic,?true);??
  • 3.點擊特效

    html5版的這個效果直接一個匿名函數(shù)搞定了,我不知道2dx怎么用一個回調(diào)搞定,就做了個特效類,專門來搞這個,嘿嘿。

    記得前面有個flareEffec函數(shù),就是在這里處理的。

    [cpp]?view plaincopyprint?
  • void?StartMenu::flareEffect(CCNode?*node)??
  • {??
  • ????onButtonEffect();??
  • ????Effect*?flareEffect?=?Effect::create();??
  • ????CCCallFunc?*callback?=??CCCallFunc::create(this,?callfunc_selector(StartMenu::newGame));??
  • ????flareEffect->flareEffect(this,?callback);??
  • }??
  • onButtonEffect是聲音特效,Effect就是用來做動畫特效的,關鍵就是其flareEffect函數(shù)。

    [cpp]?view plaincopyprint?
  • void?Effect::flareEffect(CCNode?*parent,?CCCallFunc?*callback)??
  • {??
  • ????//?特效圖片??
  • ????CCSprite?*flare?=?CCSprite::create(s_flare);??
  • ??????
  • ????//?設置混合模式??
  • ????ccBlendFunc?cbl?=?{GL_SRC_ALPHA,?GL_ONE};??
  • ????flare->setBlendFunc(cbl);??
  • ??????
  • ????//?添加到父節(jié)點??
  • ????parent->addChild(flare,?10);??
  • ??????
  • ????//?設置初始透明度??
  • ????flare->setOpacity(0);??
  • ??????
  • ????//?設置初始位置??
  • ????flare->setPosition(ccp(-30,?297));??
  • ??????
  • ????//?設置初始角度??
  • ????flare->setRotation(-120);??
  • ??????
  • ????//?設置初始放大系數(shù)??
  • ????flare->setScale(0.2);??
  • ??????
  • ????//?透明度漸變??
  • ????CCActionInterval?*opacityAnim?=?CCFadeTo::create(0.5,?255);??
  • ????CCActionInterval?*opacDim?=?CCFadeTo::create(1,?0);??
  • ??????
  • ????//?大小漸變??
  • ????CCActionInterval?*bigAnim?=?CCScaleBy::create(0.7,?1.2,?1.2);??
  • ??????
  • ????//?漸變速率,正玄變化,由快到慢??
  • ????CCEaseSineOut?*biggerEase?=?CCEaseSineOut::create(bigAnim);??
  • ????CCActionInterval?*moveAnim?=?CCMoveBy::create(0.5,?ccp(328,?0));??
  • ????CCEaseSineOut?*moveEase?=?CCEaseSineOut::create(moveAnim);??
  • ??????
  • ????//?角度旋轉(zhuǎn)??
  • ????CCActionInterval?*roteAnim?=?CCRotateBy::create(2.5,?90);??
  • ??????
  • ????//?角度旋轉(zhuǎn)速度,指數(shù)變化??
  • ????CCEaseExponentialOut?*?rotateEase?=?CCEaseExponentialOut::create(roteAnim);??
  • ??????
  • ????//?放大到原大小??
  • ????CCScaleTo?*bigger?=?CCScaleTo::create(0.5,?1);??
  • ??????
  • ????//?動畫完成后回調(diào)函數(shù)??
  • ????CCCallFuncN?*onComplete?=??CCCallFuncN::create(flare,?callfuncN_selector(Effect::killFlare));??
  • ??????
  • ????//?執(zhí)行動畫和回調(diào)函數(shù)??
  • ????flare->runAction(CCSequence::create(opacityAnim,?biggerEase,?opacDim,?onComplete,?callback,??NULL));??
  • ????flare->runAction(moveEase);??
  • ????flare->runAction(rotateEase);??
  • ????flare->runAction(bigger);??
  • ??
  • }??

  • 這個還是按照js的邏輯寫的。傳了一個parent的node和一個回調(diào)函數(shù)進來,然后一系列動作,最后執(zhí)行動作和回調(diào)。

    回調(diào)函數(shù)里有個killFlare函數(shù),其實就是用來干掉這個特效精靈的,因為如果不干掉,會一直添加。
    到這里,這個菜單的基本功能就做完了,還差一些回調(diào),狀態(tài)控制等沒有加,后續(xù)再來弄。

    總結(jié)

    以上是生活随笔為你收集整理的cocos2d-x游戏开发(二)开始菜单续的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。