Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2d-x游戏开发(二)开始菜单续大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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


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

1.飞船

  1. //ships
  2. CCTexture2D*textCache=CCTextureCache::sharedTextureCache()->addImage(s_ship01);
  3. @H_457_32@m_ship=CCSprite::createWithTexture(textCache,CCRectMake(0,45,60,38));
  4. this->addChild(m_ship,4);
  5. CCPointposition=ccp(CCRANDOM_0_1()*winSize.width,0);
  6. @H_457_32@m_ship->setPosition(position);
  7. @H_457_32@m_ship->runAction(CCMoveBy::create(2,ccp(CCRANDOM_0_1()*winSize.width,position.y+winSize.height+100)));
  8. @H_607_67@
这里的飞船就是一个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); @H_607_67@
然后看update的实现
?
    if(m_ship->getPosition().y>480){
  1. CCPointpos=ccp(CCRANDOM_0_1()*winSize.width,10);
  2. @H_457_32@m_ship->setPosition(pos);
  3. @H_457_32@m_ship->runAction(CCMoveBy::create(floor(5*CCRANDOM_0_1()),pos.y+480)));
  4. }
  5. @H_607_67@
飞船飞出屏幕后就重新设置其位置再执行动作。

2.音效

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

?
    SimpleAudioENGIne::sharedENGIne()->setBACkgroundMusicVolume(0.7);
  1. SimpleAudioENGIne::sharedENGIne()->playBACkgroundMusic(s_mainMainMusic,true);
  2. @H_607_67@ 3.点击特效

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

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

    ?
      voidStartMenu::@R_489_8225@Effect(CCNode*nodE)
    1. {
    2. onButtonEffect();
    3. Effect*@R_489_8225@Effect=Effect::create();
    4. CCCallFunc*callBACk=CCCallFunc::create(this,callfunc_SELEctor(StartMenu::newGamE));
    5. @R_489_8225@Effect->@R_489_8225@Effect(this,callBACk);
    6. }
    7. @H_607_67@ onButtonEffect是声音特效,Effect就是用来做动画特效的,关键就是其@R_489_8225@Effect函数。

      ?
        voidEffect::@R_489_8225@Effect(CCNode*parent,CCCallFunc*callBACk)
      1. //特效图片
      2. CCSprite*@R_489_8225@=CCSprite::create(s_@R_489_8225@);
      3. //设置混合模式
      4. ccBlendFunccbl={GL_SRC_ALPHA,GL_ONE};
      5. @R_489_8225@->setBlendFunc(cbl);
      6. //添加到父节点
      7. parent->addChild(@R_489_8225@,10);
      8. //设置初始透明度
      9. @R_489_8225@->setOpacity(0);
      10. //设置初始位置
      11. @R_489_8225@->setPosition(ccp(-30,297));
      12. //设置初始角度
      13. @R_489_8225@->setRotation(-120);
      14. //设置初始放大系数
      15. @R_489_8225@->setScale(0.2);
      16. //透明度渐变
      17. CCActionInterval*opacityAnim=CCFadeTo::create(0.5,255);
      18. CCActionInterval*opacDim=CCFadeTo::create(1,0); BACkground-color:inherit">//大小渐变
      19. CCActionInterval*bigAnim=CCScaleBy::create(0.7,1.2,1.2);
      20. //渐变速率,正玄变化,由快到慢
      21. CCEaseSineOut*biggerEase=CCEaseSineOut::create(bigAnim);
      22. CCActionInterval*moveAnim=CCMoveBy::create(0.5,ccp(328,0));
      23. CCEaseSineOut*moveEase=CCEaseSineOut::create(moveAnim);
      24. //角度旋转
      25. CCActionInterval*roteAnim=CCRotateBy::create(2.5,90);
      26. //角度旋转速度,指数变化
      27. CCEaseExponentialOut*rotateEase=CCEaseExponentialOut::create(roteAnim);
      28. //放大到原大小
      29. CCScaleTo*bigger=CCScaleTo::create(0.5,1);
      30. //动画完成后回调函数
      31. CCCallFuncN*onComplete=CCCallFuncN::create(@R_489_8225@,callfuncN_SELEctor(Effect::kill@R_489_8225@));
      32. //执行动画和回调函数
      33. @R_489_8225@->runAction(CCSequence::create(opacityAnim,biggerEase,opacDim,onComplete,callBACk,NULL));
      34. @R_489_8225@->runAction(moveEasE);
      35. @R_489_8225@->runAction(rotateEasE);
      36. @R_489_8225@->runAction(bigger);
      37. }
      38. @H_607_67@
        这个还是按照js的逻辑写的。传了一个parent的node和一个回调函数进来,然后一系列动作,最后执行动作和回调。

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

        大佬总结

        以上是大佬教程为你收集整理的cocos2d-x游戏开发(二)开始菜单续全部内容,希望文章能够帮你解决cocos2d-x游戏开发(二)开始菜单续所遇到的程序开发问题。

        如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

        本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
        如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。