今天,我将带大家一起征服cocos2d的菜单。你不可能会做一个游戏而缺少菜单功能吧?cocos2d使得制作菜单变得非常简单。但是,在我们开始之前,需要确保构建一个系统,它非常容易扩展,以后制作任何游戏都可以用到,它就是我们即将创建的“场景管理器”(Scene Manager)。

这里有本教程的完整源代码

你可以去cocos2d官网上下载最新版本:http://www.cocos2d-iphone.org/download。目前最新版本是1.0,这是个稳定版本,之后会更新1.x版本,这个版本会支持苹果的2代,3代,4代。。。直至n代产品,意思是api向后兼容。而Riq大神正准备开发cocos2d 2.0版本,这个版本不向后兼容,而且只有3gs及其以后版本才支持。因为新版本使用opengles 2.0,可以直接使用shader操作GPU,以后性能和效果都会更酷些。如果大家想学习opengles的话,可以从2.0开始学起。

下载完最新版本后,解压,然后运行下面的脚本就可以安装xcode模块了:

$ sudo ./install_template.sh

安装好之后,重启Xcode,然后选择 File->New Project->cocos2d Application(注意:下图还是0.99.4,因为这个教程写的时候比较早,我也不改了,大家明白就好)

试着编译到模拟器上去----你可以选择Build->Build and Debug-Breakpoints on。如果你编译出了问题,那么请确保你选择的是模拟器,其次,你选择了正确的sdk。我现在选择的是3.1.3,因为我使用的是2代的ipod touch。苹果只会更新3.2以后的所有版本,但是,我仍然希望我的程序可以向后兼容一些老的操作系统。

一旦编译到模拟器上之后,你将看到下面的屏幕:

注意:如果条件允许的话,你应该把你的程序在老设备和新设备上都测试一下。我以前做游戏的时候,会在游戏的加载画面里面显示一些“提示”,这些信息可以帮助玩家更好地了解游戏的玩法。同时,这样也可以使得加载画面看起来更快,因为玩家注意力被分散了,所以感觉上“慢”了。然后,那种在1代的设备上要花费10秒来加载的画面,在iphone4上面可能一眨眼就没了。为了解决这个问题,我会在加载完成之后,显示一个“Continue”按钮,这样玩家就有时间读“提示信息”了,同时也不会感觉很奇怪。只是一个小技巧而已:)

我们将在一个背景层上面创建一个简单的菜单。在我们继续这个教程之前,我需要带领大家从头开始制作,这样的话能帮助大家更好地理解。首先最重要的事情,我们并不需要自动生成的HelloWorldScene.h和HelloWorldScene.m文件,所以让我们删了它们吧!

现在,我们将创建一个简单的场景管理器----我们这样做的目的是,今后可以对层与层之间的切换有更多的控制权。直接在“Classes”分组上面点击右键,选择“Add”,然后是“New File”。

我们将添加一个新的“New Objective-C”文件,并命名为“SceneManager”,你需要确保“Also create SceneManager.h”复选框被选中。

那么,这个文件里的代码看起来是什么样子呢?

#import"cocos2d.h"#import"MenuLayer.h"@interface SceneManager : NSObject {

}+(void) goMenu;

@end

然后,往.m文件里添加下列内容:

#import"SceneManager.h"@interface SceneManager ()+(void) go: (CCLayer*) layer;+(CCScene*) wrap: (CCLayer*) layer;

@end

@implementation SceneManager+(void) goMenu{

CCLayer*layer=[MenuLayer node];

[SceneManager go: layer];

}+(void) go: (CCLayer*) layer{

CCDirector*director=[CCDirector sharedDirector];

CCScene*newScene=[SceneManager wrap:layer];if([director runningScene]) {

[director replaceScene: newScene];

}else{

[director runWithScene:newScene];

}

}+(CCScene*) wrap: (CCLayer*) layer{

CCScene*newScene=[CCScene node];

[newScene addChild: layer];returnnewScene;

}

@end

你可能已经注意到了,我们包含了“MenuLayer.h”文件,然后在“goMenu”方法中使用了MenuLayer。所以,让我们再创建一个类,叫MenuLayer.h,如下所示:

#import"MenuLayer.h"@implementation MenuLayer-(id) init{

self=[super init];

CCLabel*titleLeft=[CCLabel labelWithString:@"Menu"fontName:@"Marker Felt"fontSize:48];

CCLabel*titleRight=[CCLabel labelWithString:@"System"fontName:@"Marker Felt"fontSize:48];

CCLabel*titleQuotes=[CCLabel labelWithString:@"\"\""fontName:@"Marker Felt"fontSize:48];

CCLabel*titleCenterTop=[CCLabel labelWithString:@"How to build a..."fontName:@"Marker Felt"fontSize:26];

CCLabel*titleCenterBottom=[CCLabel labelWithString:@"Part 1"fontName:@"Marker Felt"fontSize:48];

CCMenuItemFont*startNew=[CCMenuItemFont itemFromString:@"New Game"target:self selector: @selector(onNewGame:)];

CCMenuItemFont*credits=[CCMenuItemFont itemFromString:@"Credits"target:self selector: @selector(onCredits:)];

CCMenu*menu=[CCMenu menuWithItems:startNew, credits, nil];

titleCenterTop.position=ccp(160,380);

[self addChild: titleCenterTop];

titleCenterBottom.position=ccp(160,300);

[self addChild: titleCenterBottom];

titleQuotes.position=ccp(160,345);

[self addChild: titleQuotes];

titleLeft.position=ccp(80,345);

[self addChild: titleLeft];

titleRight.position=ccp(220,345);

[self addChild: titleRight];

menu.position=ccp(160,200);

[menu alignItemsVerticallyWithPadding:40.0f];

[self addChild:menu z:2];returnself;

}-(void)onNewGame:(id)sender{

[SceneManager goMenu];

}-(void)onCredits:(id)sender{

[SceneManager goMenu];

}

@end

最后,修改app delegate(MenuTutorialAppDelegate.m),包含SceneManager.h头文件:

#import"SceneManager.h"

并且删除:

#import"HelloWorldScene.h"

当然,我们还需要修改一些内容。因为所有的“runWithScene”逻辑,现在都被SceneManager类所替代,因此,把下面的语句:

[[CCDirector sharedDirector] runWithScene: [HelloWorld scene]];

替换成:

[SceneManager goMenu];

我们也将会让我们的例子在Portrait模式运行(竖版)---因此,我们需要取消一些注释代码,具体如下:(使用cocos2d 1.0的朋友,如果不知道怎么弄,可以在下方留言)

//Obtain the shared director in order to...CCDirector*director=[CCDirector sharedDirector];//Sets landscape mode//[director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];

当你编译并运行工程之后,你就能看到上面的截屏啦!祝贺你完成了第一部分教程的学习,接下来,我们将在第二部分教程中学到更多有意思的内容。

(注意:教程源代码如果不能运行,可以重新建立一个工程,然后把下载的工程里面的Classes文件夹下面的文件拷到新工程里面就ok了)

python cocos2d菜鸟教程_(译)cocos2d菜单教程:第一部分相关推荐

  1. python平稳性检验_时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python)...

    时间序列预测基础教程系列(14)_如何判断时间序列数据是否是平稳的(Python) 发布时间:2019-01-10 00:02, 浏览次数:620 , 标签: Python 导读: 本文介绍了数据平稳 ...

  2. Windows 10教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Windows 10入门教程 - 从简单的步骤了解Windows 10,从基本到高级概念,包括概述,安装,入门,GUI基础知识,导航,开始菜单,任务栏,平板电脑模式,文件资源管理器,Cort ...

  3. Word教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Word 2010入门教程 - 从简单的步骤入门Microsoft Office 2010,从基本到高级概念,包括探索窗口,后台视图,输入文本,移动,打开,关闭文档,上下文帮助,插入,选择, ...

  4. Apache POI(Word)教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 IT宝库整理的Apache POI Word入门教程 - 从基本到高级概念的简单简单步骤学习Apache POI Word,其中包括概述,Apache POI安装,核心类,文档,段落,边框, ...

  5. EJB教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 EJB入门教程 - 从简单的步骤了解EJB 3.0和3.1(Enterprise Java Bean)框架,从基本概念到高级概念,包括概述,环境设置,应用服务器,容器,企业Bean,注释,会 ...

  6. 高级Excel功能教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Excel是办公室自动化中非常重要的一款软件,Excel函数则是Excel中的内置函数.Excel函数共包含11类,分别是数据库函数.日期与时间函数.工程函数.财务函数.信息函数.逻辑函数. ...

  7. Java国际化教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Java国际化入门教程 - 从简单的步骤了解Java国际化从基本到高级概念,包括概述,环境设置,区域设置,区域设置详细信息,显示语言,ResourceBundle,NumberFormat, ...

  8. Windows 10开发教程_编程入门自学教程_菜鸟教程-免费教程分享

    教程简介 Windows 10开发入门教程 - 从简单的步骤了解Windows 10开发,从基本到高级概念,包括简介,UWP,第一个应用程序,商店,XAML控件,数据绑定,XAML性能,自适应设计,自 ...

  9. 计算机系统精品教程,_《计算机操作系统教程》课程教学课件(精品) 设备管理(88P).pdf...

    _<计算机操作系统教程>课程教学课件(精品) 设备管理(88P).pdf 第8章 设备管理 §8.1 引言 §8.2 数据传送控制方式 §8.3 中断技术 §8.4 缓冲技术 §8.5 设 ...

  10. weakauras教程_简单的WeakAuras2教程 基础功能设置指南

    玩家分享简单的WeakAuras2插件的基本攻略设置教程,WeakAuras2作为当今的神级插件已经受到了越来越多玩家的使用,WeakAuras2插件除了可以设置简单的技能监视,能量.蓝量的监控以外还 ...

最新文章

  1. 阿里财报:盒马和天猫超市是跑的最快的业务,阿里云离盈利只差临门一脚
  2. 轻松掌握ISO8583报文协议
  3. .net的垃圾回收机制[转]
  4. 统计学习方法第二章作业:感知机模型原始形式与对偶形式代码实现
  5. php自动转换和强制转换,Java数据类型转换(自动转换和强制转换)
  6. 链表逆序的原理及实例
  7. pt-show-grants的用法
  8. java索引越界异常_索引越界异常java
  9. java计算机毕业设计劳务外包管理系统源码+系统+mysql数据库+lw文档
  10. Excel怎么转换成PDF?这两招轻松解决
  11. 干了5年的前端,实在熬不动了...
  12. 神秘国度的爱情故事——广州大学课程设计
  13. 物联网毕设分享 stm32人体健康状态检测系统(项目开源)
  14. 数据结构习题集之魔王语言解释
  15. 精简指令集结构(Reduced Instruction Set Computer,RISC)
  16. 独秀日记:给我介绍一份工作
  17. e光的matlab,【e光嫩肤的效果怎么样】_功效_作用-大众养生网
  18. 开关电源雷击浪涌整改_浪涌整改措施.doc
  19. IDEA反编译出整个jar包源码
  20. 【Twinkle】软件工程师的职业路线

热门文章

  1. atom编写python程序_如何进行Python程序的编写
  2. 验证证书有效期_笔试查分前,教资考试4个有效期你到底弄清楚了没?逾期不补!...
  3. linux安装无线电软件,基于Linux的软件无线电系统软件平台的研究与实现
  4. java group类_浅析Java中线程组(ThreadGroup类)
  5. joyui版本和android版本,游戏爱好者注意!JOYUI 11来了
  6. micro850通讯协议msg_micro850通讯协议msg_半导体semi通讯的协议SECS/GEM
  7. python中的for语句涉及的序列可以是列表_Python中的列表与循环
  8. 镜像和linux关系,Docker中容器和镜像的关系【通俗易懂】
  9. linux内核配置打开声卡,Linux设备配置之声卡配置
  10. 本构二次开发 c语言,umat二次开发超弹性本构.doc