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

欢迎转载:http://blog.csdn.net/fylz1125/article/details/8492497


上一篇文章已经实现了MoonWarriors开始菜单的大部分元素,还差一个运动的飞船和一个点击newGame的特效和音效。

1.飞船

// 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一个飞船,添加,设置位置,执行动作。

在设置飞船位置的时候注意,每次飞船出来位置都是随机的。引擎封装了一个随机函数CCRANDON_0_1(),这个是随机一个0到1之间的float数。用一个MoveBy来实现飞船移动,同样移动的目标点也有一定的随机性。

你以为这样就完了吗,那你就错了。所有的这些元素都在init()函数完成的,即使runAction了,也就只是执行一次。

为了看到不断有飞船在屏幕上飞,需要加点料。这里用schedule()函数来不断更新。这个函数就是任务调度,每隔dt调用一次回调函数,这里就是每0.1秒执行update函数

this->schedule(schedule_selector(StartMenu::update), 0.1);
然后看update的实现
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)));
        
    }
飞船飞出屏幕后就重新设置其位置再执行动作。

2.音效

这个很简单,直接用了声音引擎

    SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.7);
    SimpleAudioEngine::sharedEngine()->playBackgroundMusic(s_mainMainMusic, true);
3.点击特效

html5版的这个效果直接一个匿名函数搞定了,我不知道2dx怎么用一个回调搞定,就做了个特效类,专门来搞这个,嘿嘿。

记得前面有个flareEffec函数,就是在这里处理的。

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函数。

void Effect::flareEffect(CCNode *parent, CCCallFunc *callback)
{
    // 特效图片
    CCSprite *flare = CCSprite::create(s_flare);
    
    // 设置混合模式
    ccBlendFunc cbl = {GL_SRC_ALPHA, GL_ONE};
    flare->setBlendFunc(cbl);
    
    // 添加到父节点
    parent->addChild(flare, 10);
    
    // 设置初始透明度
    flare->setOpacity(0);
    
    // 设置初始位置
    flare->setPosition(ccp(-30, 297));
    
    // 设置初始角度
    flare->setRotation(-120);
    
    // 设置初始放大系数
    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);
    
    // 角度旋转
    CCActionInterval *roteAnim = CCRotateBy::create(2.5, 90);
    
    // 角度旋转速度,指数变化
    CCEaseExponentialOut * rotateEase = CCEaseExponentialOut::create(roteAnim);
    
    // 放大到原大小
    CCScaleTo *bigger = CCScaleTo::create(0.5, 1);
    
    // 动画完成后回调函数
    CCCallFuncN *onComplete =  CCCallFuncN::create(flare, callfuncN_selector(Effect::killFlare));
    
    // 执行动画和回调函数
    flare->runAction(CCSequence::create(opacityAnim, biggerEase, opacDim, onComplete, callback,  NULL));
    flare->runAction(moveEase);
    flare->runAction(rotateEase);
    flare->runAction(bigger);

}

这个还是按照js的逻辑写的。传了一个parent的node和一个回调函数进来,然后一系列动作,最后执行动作和回调。

回调函数里有个killFlare函数,其实就是用来干掉这个特效精灵的,因为如果不干掉,会一直添加。
到这里,这个菜单的基本功能就做完了,还差一些回调,状态控制等没有加,后续再来弄。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Cocos2d-x是一款非常流行的移动跨平台游戏引擎。它提供了丰富的功能和工具,方便开发者进行游戏开发。有多本与Cocos2d-x移动游戏开发相关的书籍被出版,这些书籍提供了全面的教程和实战经验。 其中,《捕鱼达人游戏开发》是一本全面的、比较实用的Cocos2d-x游戏开发教程。这本书汇集了热门手机游戏《捕鱼达人》开发的实战经验,作者从基础内容开始介绍Cocos2d-x引擎,并逐步深入地介绍了相关的开发技术和经验。 还有一本《Cocos2d-x高级开发教程》,该书作者曾参与Cocos2d-x for Windows Phone 7引擎开发,并负责《捕鱼达人》系列游戏Windows Phone版本的移植工作。作者也参与了多个移动游戏项目的开发,拥有丰富的游戏开发经验。 除了这些书籍,还有《Cocos2D-X游戏开发技术精解》。这本书详细介绍了如何使用Cocos2D-X引擎开发移动平台游戏,包括引擎的简介以及其他相关内容。 总结来说,Cocos2d-x是一款流行的移动跨平台游戏引擎,有多本相关的书籍提供了全面的教程和实战经验,适合想要进行Cocos2d-x移动游戏开发开发者参考和学习。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Cocos2d-x高级开发教程](https://download.csdn.net/download/surport_t/9776900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Cocos2d-x高级开发教程制作自己的《捕鱼达人》](https://download.csdn.net/download/qq461787436/10872674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Cocos2D-X游戏开发技术精解](https://download.csdn.net/download/weixin_39840588/11417620)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值