2019独角兽企业重金招聘Python工程师标准>>>

有点困了,从桌子换到床上,刚要开敲,豆瓣电台传来的传来奇怪的歌声“马的~马的~”

看看歌词,应该是“慢慢等”,好吧,继续

首先看下vs中的文件

整个项目就这些代码,这样来看逻辑结构比较清晰。

-----------------------------------------------------------------------------------------------------------

首先看下菜单界面:

-----------------------------------------------------------------------------------------------------------

这个游戏菜单界面有很多值得学习的地方

在init初始化里,先添加背景图,setScaleX方法可以让背景图根据手机屏幕来自适应。 

[cpp]  view plain copy
  1. winSize = CCDirector::sharedDirector()->getWinSize();
  2. //添加背景 0 ;1;
  3. CCSprite* sl = CCSprite::create(s_loading);
  4. sl->setScaleX(winSize.width/sl->getContentSize().width);
  5. sl->setScaleY(winSize.height/sl->getContentSize().height);
  6. sl->setAnchorPoint(ccp(0, 0));
  7. this->addChild(sl,0,1);

然后添加时那个菜单按钮,这里使用CCSprite来初始化的CCMenuItemSprite。

[cpp]  view plain copy
  1. CCSprite* aboutNormal = CCSprite::create(s_menu, CCRectMake(252, 0, 126, 33));
  2. CCSprite* aboutSelected = CCSprite::create(s_menu, CCRectMake(252, 33, 126, 33));
  3. CCSprite* aboutDesabled = CCSprite::create(s_menu, CCRectMake(252, 33*2, 126, 33));
  4. CCMenuItemSprite* about = CCMenuItemSprite::create(aboutNormal, aboutSelected, aboutDesabled,
  5. this, menu_selector(StartMenu::menuCallback));//StartMenu::menuCallback
  6. /“关于”按钮tag为21
  7. about->setTag(21);

把item添加到menu里之后,再添加到界面上。

下面语句作用是,让menu的所有按钮竖着排列,并且设置间距为20.

[cpp]  view plain copy
  1. menu->alignItemsVerticallyWithPadding(20);

菜单里有个飞机一直在抢镜头,是这样实现的:

首先添加一个update函数,调用频率是0.1秒。

//添加update回调函数

this->schedule(schedule_selector(StartMenu::update), 0.1);

[cpp]  view plain copy
  1. //飞船在初始界面移动函数
  2. void StartMenu::update(float dt)
  3. {
  4. if (m_ship->getPosition().y > winSize.height)
  5. {
  6. CCPoint pos = ccp(CCRANDOM_0_1() * winSize.width, 10);
  7. m_ship->setPosition(pos);
  8. m_ship->runAction(CCMoveBy::create(floor(5 * CCRANDOM_0_1()), ccp(CCRANDOM_0_1() * winSize.width, pos.y + winSize.height)));
  9. }
  10. }

然后在update里,根据小飞机的y坐标,来添加动画,

先把小飞机放在最底下,x坐标的位置是随机的。

然后以随机速度往上飞行。

按钮点击时还播放一个特效,而且点击开始游戏后,会有一个太阳光的特效划过屏幕,以一个demo的角度来看,这是非常炫的!

[cpp]  view plain copy
  1. //选择按钮时的音乐
  2. void StartMenu::onButtonEffect()
  3. {
  4. if (Config::sharedConfig()->getAudioState()) {
  5. SimpleAudioEngine::sharedEngine()->playEffect(s_buttonEffect);
  6. }
  7. }
[cpp]  view plain copy
  1. //选择开始游戏之后的效果
  2. void StartMenu::flareEffect(CCObject* pSender)
  3. {
  4. onButtonEffect();
  5. int n=0;
  6. CCLog("begin>>>StartMenu::flareEffect",n);
  7. Effect* flareEffect = Effect::create();
  8. CCCallFunc *callback =  CCCallFunc::create(this, callfunc_selector(StartMenu::newGame));
  9. CCLog("begin>>>StartMenu::flareEffect>>1",n);
  10. flareEffect->flareEffect(this, callback);
  11. CCLog("begin>>>StartMenu::flareEffect>>2",n);
  12. }

在这个例子中,按钮事件是指定同一个回调函数,然后根据tag判断点击的是哪个menuItem的。

[cpp]  view plain copy
  1. void StartMenu::menuCallback(CCObject* pSender)
  2. {
  3. onButtonEffect();
  4. int tag = dynamic_cast<CCNode*>(pSender)->getTag();
  5. if (tag == 20) {
  6. //转到"Options"
  7. CCScene *scene = Options::scene();
  8. CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.2, scene));
  9. }

-----------------------------------------------------------------------------------------------------------

紧接着,看下Effect类里这个动画效果

-----------------------------------------------------------------------------------------------------------

就是这种太阳光效果,在点击开始游戏之后,播放这个特效,并且加入回调。

[cpp]  view plain copy
  1. Effect* flareEffect = Effect::create();
  2. CCCallFunc *callback =  CCCallFunc::create(this, callfunc_selector(StartMenu::newGame));
  3. CCLog("begin>>>StartMenu::flareEffect>>1",n);
  4. flareEffect->flareEffect(this, callback);

以下是 flareEffect方法:

[cpp]  view plain copy
  1. //执行完这个函数跳到StartMenu::newGame()开始游戏
  2. void Effect::flareEffect(CCNode *parent, CCCallFunc *callback)
  3. {
  4. int n=0;
  5. CCSize winSize = CCDirector::sharedDirector()->getWinSize();
  6. // 特效图片
  7. CCSprite *flare = CCSprite::create(s_flare);
  8. // 设置混合模式
  9. ccBlendFunc cbl = {GL_SRC_ALPHA, GL_ONE};
  10. flare->setBlendFunc(cbl);
  11. // 添加到父节点
  12. parent->addChild(flare, 10);
  13. // 设置初始透明度
  14. flare->setOpacity(0);
  15. // 设置初始位置
  16. flare->setPosition(ccp(-30, winSize.height - 130));
  17. // 设置初始角度
  18. flare->setRotation(-120);
  19. // 设置初始放大系数
  20. flare->setScale(0.2);
  21. // 透明度渐变
  22. CCActionInterval *opacityAnim = CCFadeTo::create(0.5, 255);
  23. CCActionInterval *opacDim = CCFadeTo::create(1, 0);
  24. // 大小渐变
  25. CCActionInterval *bigAnim = CCScaleBy::create(0.7, 1.2, 1.2);
  26. // 渐变速度
  27. CCEaseSineOut *biggerEase = CCEaseSineOut::create(bigAnim);
  28. CCActionInterval *moveAnim = CCMoveBy::create(0.5, ccp(328, 0));
  29. CCEaseSineOut *moveEase = CCEaseSineOut::create(moveAnim);
  30. // 角度旋转
  31. CCActionInterval *roteAnim = CCRotateBy::create(2.5, 90);
  32. // 角度旋转速度,指数变化
  33. CCEaseExponentialOut * rotateEase = CCEaseExponentialOut::create(roteAnim);
  34. // 放大到原大小
  35. CCScaleTo *bigger = CCScaleTo::create(0.5, 1);
  36. // 动画完成后回调函数,干掉精灵
  37. CCCallFuncN *removeFunc =  CCCallFuncN::create(flare, callfuncN_selector(Effect::killSprite));
  38. // 执行动画和回调函数
  39. flare->runAction(CCSequence::create(opacityAnim, biggerEase, opacDim, removeFunc, callback,  NULL));
  40. flare->runAction(moveEase);
  41. flare->runAction(rotateEase);
  42. flare->runAction(bigger);
  43. CCLog("end>>>Effect::flareEffect()",n);
  44. }

资源就这几个,其实分解起来也很简单,就是旋转、缩放、渐隐、位置等。

好了休息会,过会去爸妈家吃饭:)

------------------- 飞船起飞--------------------

Cocos2dx游戏开发系列笔记10:解刨《战神传说》

Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应

Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的

Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)

Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上

Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》

Cocos2dx游戏开发系列笔记4:怎样新加一个Scene类?

Cocos2dx游戏开发系列笔记3:牛刀小试->忍者飞镖射幽灵的Demo

Cocos2dx游戏开发系列笔记2:一个刚创建的cocos2dx中的demo里都有什么

Cocos2dx游戏开发系列笔记1:一个崭新的开始,cocos2dx2.2+ndkr9+Cygwin

-------------------- 飞船降落--------------------

最后,骨头介绍一下陪在身边的哲哲(右边就是低调的哲哲)

哲哲,小名 YIYI ,手工爱好者,文艺范,手艺人,《YiYiの妙舍》创始人,很有自己想法。

转载于:https://my.oschina.net/kaiyuan/blog/182676

Cocos2dx游戏开发系列笔记10:解刨《战神传说》相关推荐

  1. Cocos2dx游戏开发系列笔记11:解刨《战神传说》完结篇

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 两点: 1 感谢 net19880504 同学,在上篇提到:想让骨头继续写<战神传说> ...

  2. Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上

    2019独角兽企业重金招聘Python工程师标准>>> 感谢听D同学赞助的Demo. 那怎样让它运行在vs中呢: 1 使用cocos2d-x-2.2\tools\project-cr ...

  3. Cocos2dx游戏开发系列笔记3:牛刀小试-忍者飞镖射幽灵的Demo

    2019独角兽企业重金招聘Python工程师标准>>> 就是这个例子,应该很简单,主要用到的有:精灵的移动,触摸,碰撞检测. 赶紧搞定,待会还要陪哲哲来几局爱消除. 首先在Scene ...

  4. Cocos2dx游戏开发系列笔记8:开搞一个射击游戏《战神传说》//就个打飞机的

    2019独角兽企业重金招聘Python工程师标准>>> 又是一个愉快的夜晚 还是那张长长的工作桌 哲哲在左边做一个香云纱手包 骨头在这里噼里啪啦的解刨 pad里放着<赢在中国& ...

  5. Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》

    2019独角兽企业重金招聘Python工程师标准>>> 周末了,哲哲在旁边看<爸爸去哪>,骨头继续玩cocos2dx, 首先,如果你新加了CPP和H文件,记得修改项目目录 ...

  6. Cocos2dx游戏开发系列笔记5:继续润色《忍者飞镖射幽灵》(VS2013快捷键)

    懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 ) 周末了,哲哲在旁边看<爸爸去哪>,骨头继续玩cocos2dx, 源码下载 ht ...

  7. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)

    懒骨头(http://blog.csdn.net/iamlazybone  QQ124774397 青岛 ) 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜 ...

  8. Cocos2dx游戏开发系列笔记7:一个简单的跑酷游戏《萝莉快跑》的消化(附下载)...

    2019独角兽企业重金招聘Python工程师标准>>> 或许有天 我们羡慕和崇拜的人 因为我们的努力 也会来了解我们 说不定 还会成为好友 骨头喜欢这样与哲哲共勉 多少个夜晚 一张长 ...

  9. Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应问题

    转载:http://blog.csdn.net/iamlazybone/article/details/17191539 懒骨头(http://blog.csdn.net/iamlazybone  Q ...

最新文章

  1. meson 中调用shell script
  2. 全球缺芯大潮中,以软代硬能否另辟蹊径?
  3. 创建一个强名称密钥文件+ 如何在 Visual C# .NET 中将程序集安装到全局程序集缓存中...
  4. 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
  5. 扩展Guava缓存溢出到磁盘
  6. 从Zabbix数据库中提取内存采集的数据,做内存使用率计算
  7. 集训04-06 (c++实现)
  8. jsonobject转list集合_怎样优雅的操作集合,CollectionUtils工具类正确使用姿势
  9. mybatis+spring mvc 完美整合方案 查询,保存,更新,删除自动生成
  10. vue跨域问题:proxy代理跨域
  11. windows下安装ta-lib的方法
  12. 早悟兰因(兰因絮果)
  13. JavaWeb毕业生就业管理系统项目实战教程
  14. Java 拓扑图构建_用JAVA画个简单的拓扑图
  15. LeetCode 739. 每日温度 | Python
  16. Ubuntu16.04安装运行go-ipfs
  17. 考研数学1-考试大纲(2022年)
  18. iphone6s html5没声音,iphone6s没有声音了怎么办(解决苹果机来电没声音的3种方式)...
  19. 镜子中的 Google
  20. 在vue中使用web3.js开发以太坊dapp

热门文章

  1. kubernets HPA
  2. 弘易信泰,SAAS安全性策略解读
  3. html怎样添加记住密码选项,怎么让网页记住密码?让网页记住密码的方法
  4. sa8295 yocto 编译问题
  5. 计算机考研常见面试题
  6. 什么是网络端口?或许工作10年的人也很难100%理解
  7. 大数据---离线数仓实战项目(四)
  8. 2020年山东事业单位都考什么?(山东事业编)
  9. 围棋人机大战一周年:如何让AlphaGo更快更轻盈
  10. c语言怎么判断素数 n 2,C语言判断正整数n(n2)是否是素数