cocos2d 游戏选关界面 附源码

1. 选关效果图

每页15个,总共45个,每行5个。这些都可以改。源码基于Cocos2d 3.3。

2.实现原理

反正有源码这里就少讲点了。我看下cocos2d 的 Menu的实现,是一个Layer, 然后里面添加很多MenuItem,如果用它默认的添加方式,这种几行几列的很难搞,所以我们只需要创建一个空的Menu,然后以我们的方式一个一个添加MenuItem即可。

[cpp] view plaincopy

  1. void LevelSelectContent::initAllLevels(int page){
  2. this->removeAllChildren();
  3. const int eachPageItemCount = g_EachPageCount;
  4. _levelMenu = Menu::create();
  5. this->addChild(_levelMenu);
  6. int const constStartPositionX = VISIBLE_WIDTH * 0.5 - levelMarginX * (g_EachLineCount / 2 - 0.5);
  7. int startPositionX = constStartPositionX;
  8. int topStartPositionY = VISIBLE_HEIGHT * 0.5 + levelMarginY * (g_EachPageCount / g_EachLineCount / 2 - 0.5);
  9. for(int i = 0 + page * eachPageItemCount; i < eachPageItemCount + page * eachPageItemCount; i++){
  10. if(i < g_maxLevel){
  11. int lineCount = g_EachLineCount;
  12. if(i!= (0 + page * eachPageItemCount) && i % lineCount == 0){
  13. startPositionX = constStartPositionX;
  14. topStartPositionY = topStartPositionY - levelMarginY;
  15. }
  16. int levelCount = i + 1;
  17. auto oneLevelItem = LevelSelectItem::create(levelCount);
  18. _levelMenu->addChild(oneLevelItem);
  19. oneLevelItem->setPosition(startPositionX, topStartPositionY);
  20. startPositionX += levelMarginX;
  21. }
  22. }
  23. _levelMenu->setPosition(0, 0);
  24. _levelMenu->setOpacity(0);
  25. auto fadeAction = FadeIn::create(0.5);
  26. _levelMenu->runAction(fadeAction);
  27. }

本质就是一个for循环,添加一个个MenuItem

3.自定义 MenuItemSprite

我们的每一个选关的有3种状态,已经完成的,将要完成的,锁住的。假设用户已经完成第5关,那么前5关都是完成的,第6关是将要完成的,后面的所有就是锁住的。

所以这里定义了一个枚举

[cpp] view plaincopy

  1. typedef enum{
  2. kAlreadyPass,
  3. kNotPassYet,
  4. kLockLevel
  5. }LevelItemType;

[cpp] view plaincopy

  1. LevelSelectItem::LevelSelectItem(int level):_level(level),_type(kLockLevel){
  2. if(level > (g_passLevelCount + 1)){
  3. this->setEnabled(false);
  4. _type = kLockLevel;
  5. }else if(level == (g_passLevelCount + 1)){
  6. this->setEnabled(true);
  7. _type = kNotPassYet;
  8. }else if(level < (g_passLevelCount + 1)){
  9. this->setEnabled(true);
  10. _type = kAlreadyPass;
  11. }
  12. }

只需要根据关卡数就能决定样子了。cocos2d默认就支持3个图片样式,normal, selected, disabled,这样只需要把后面的关卡menuitem都设置为不可用即可。

还是直接看源码了,不扯了,看源码比较清晰。

时间: 2024-10-04 11:00:32

cocos2d 游戏选关界面 附源码的相关文章

Html5 Egret游戏开发 成语大挑战(四)选关界面

通过前面的开始界面基本上了解了eui的使用方法,可以简单快速的制作一个UI界面,本篇使用第二界面选关界面展示更为难一点的代码控制,来展现关卡地图的内容,请确保素材和资源完整,可以在前面的教程中找到下载. 选关界面和开始界面不太一样,请参考开篇的结构图,需要一个推进式上下拉动的地图界面,创建基本的exml和开始界面是一样的,这里的名字叫“SceneLevelsSkin”,在组件库中把Scroller组件拖进去并给其下属内容命名group_levels,用来承载地图内容,最后加一个返回按钮. <?x

Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)

最近反复研究日常经典必用的几个android app,从主界面带来的交互方式入手进行分析,我将其大致分为三类.今天记录第一种方式,即主界面下面有几个tab页,最上端是标题栏,tab页和tab页之间不是通过滑动切换的,而是通过点击切换tab页.早期这种架构一直是使用tabhost+activitygroup来使用,随着fragment的出现及google官方也大力推荐使用fragment,后者大有代替前者之势.本文也使用fragment进行搭建,标题中的"经典"指这种交互经典,非本文的代

使用 SVG 制作单选和多选框动画【附源码】

通过 JavaScript 实现 SVG 路径动画,我们可以做很多花哨的东西.今天我们要为您介绍一些复选框和单选按钮效果.实现的主要思路是隐藏原生的输入框,使用伪元素创造更具吸引力的样式,输入框被选中的时候执行 SVG 动画. 在线演示      立即下载 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 对于自定义的复选框或单选按钮,我们使用标签的伪元素 ::before 并通过设置不透明度为0来因此输入框.初始,我们通过 Ja

Unity3D_(游戏)卡牌03_选关界面

 预计8.22日前完成~ 启动屏界面.主菜单界面.选关界面.游戏界面. 卡牌01_启动屏界面 传送门 卡牌02_主菜单界面 传送门 卡牌03_选关界面 未完! 实现过程 新建画布,添加背景,设置标题,增加选关区域范围 选关区域使用纯白色作为背景(修改其透明度值),调整选关区域位置 选关区域下方添加关卡信息(Panel默认是透明) LevelManager下方创建游戏空物体对象(Content),添加Panel,Panel上添加Grid Layout Group表格布局插件 Fixed Colum

cocos2d-x 委托模式的巧妙运用——附源码(二)

转载请注明出处:http://blog.csdn.net/hust_superman/article/details/38292265,谢谢. 继上一篇将了委托类的具体实现后,这篇来将一下如何在游戏中使用实现的委托类.也就是如何在游戏中来调用委托类来完成一些功能.具体的应用场景和应用层会在下面介绍. 先来看一看游戏demo实现的具体图片,demo比较简单,但是资源齐全,拿到源码后可以在源码的基础上继续完善demo做出一款真正的游戏.好了,老规矩,先上图再说: 游戏中点击播放按钮后会进入游戏主界面

Web 开发中很实用的10个效果【附源码下载】

在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记得收藏:) 超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 立即下载      在线演示 美!视差滚动在图片滑块中的应用 视差滚动(Parallax Scrolling)已经被广泛应用于网

精选12个时尚的 CSS3 效果【附源码下载】

精选12个时尚的 CSS3 效果[附源码下载] 这里是精选的12个很炫的 CSS3 效果.CSS3 是对 CSS 规范的一个很大的改善和增强,它使得 Web 开发人员可以很容易的在网站中加入时尚的效果.以前很多需要编写复杂的 JavaScript 代码才能实现的效果,如今只需要简单的写几句 CSS3 代码就能实现. 超炫的 CSS3 页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 源码下载 

【转载】Web 开发中很实用的10个效果【附源码下载】

超炫的页面切换动画效果 今天我们想与大家分享一组创意的页面切换熊效果集合.我们已经在示例中罗列了一组动画,可以被应用到页面切换过程中,创造出很有趣的导航效果. 立即下载      在线演示 美!视差滚动在图片滑块中的应用 视差滚动(Parallax Scrolling)已经被广泛应用于网页设计中,这种技术能够让原本平面的网页界面产生动感的立体效果.美女很养眼吧 :) 源码下载      在线演示 网页边栏过渡动画 以细微的过渡动画显示一些隐藏的侧边栏,其余的内容也是.通常侧边栏滑入,把其他内容推

cocos2d-x 委托模式的巧妙运用——附源码(一)

先来说一下委托模式是什么,下面的内容摘要自维基百科: 委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理.委托模式是一项基本技巧,许多其他的模式,如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式.委托模式使得我们可以用聚合来替代继承. 简单的Java例子 在此例中,类模拟打印机Printer拥有针式打印机RealPrinter的实例,Printer拥有的方法print()将处理转交给RealPrint