免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1832 | 回复: 1
打印 上一主题 下一主题

ios-cocos2d游戏开发基础-菜单详解-开发笔记(五) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-26 22:41 |只看该作者 |倒序浏览
ios-cocos2d游戏开发基础-菜单详解-开发笔记(五)














本文将介绍游戏制作中不可缺少的一项功能-游戏菜单,在cocos2d游戏制作中,菜单的制作方法有很多,下面将逐一介绍下菜单的制作方法(使用CCMenu类来生成菜单。CCMenu只支持 CCMenuItem节点作为它的子节点。):
一.文字菜单
  1. 01.- (id)init

  2. 02.{

  3. 03.    self = [super initWithColor:ccc4(255, 0, 255, 255)];

  4. 04.    if(self){

  5. 05.CGSize size = [[CCDirector sharedDirector] winSize];//获得OpenGL View的尺寸,虽然这里是winSize,其实并不一定是整个windows的size

  6. 06.

  7. 07.        [CCMenuItemFont setFontName:@"Marker Felt"];  //设置菜单字体

  8. 08.        [CCMenuItemFont setFontSize:32];  //设置菜单字体大小

  9. 09.

  10. 10.        //菜单项,文字标签菜单,并指定调用方法

  11. 11.        CCMenuItemFont *menuOne = [CCMenuItemFont itemFromString:@"start Game" target:self

  12. 12.                                                        selector:@selector(startGame)];

  13. 13.        CCMenuItemFont *menuThr = [CCMenuItemFont itemFromString:@"return Game" target:self selector:@selector(returnGame)];

  14. 14.        CCMenuItemFont *menuTwo = [CCMenuItemFont itemFromString:@"end Game" target:self selector:@selector(endGame)];

  15. 15.

  16. 16.        CCMenu *menu = [CCMenu menuWithItems:menuOne,menuThr,menuTwo, nil]; //用菜单项生成菜单

  17. 17.        menu.position = ccp(size.width/2, size.height/2); //坐标

  18. 18.        [menu alignItemsVerticallyWithPadding:20];   //排列对齐 *这个很重要,如果没有菜单将重叠在一起

  19. 19.        [self addChild:menu z:0 tag:2];  //加入到层

  20. 20.}

  21. 21.

  22. 22.    return self;

  23. 23.

  24. 24.}

  25. 25.

  26. 26.- (void)startGame

  27. 27.{

  28. 28.    CCLOG(@"开始游戏");

  29. 29.}

  30. 30.

  31. 31.- (void)returnGame

  32. 32.{

  33. 33.    CCLOG(@"返回游戏");

  34. 34.}

  35. 35.

  36. 36.- (void)endGame

  37. 37.{

  38. 38.    CCLOG(@"结束游戏");

  39. 39.}
  40. 复制代码
复制代码
基于CCMenuItemFont,用于显示一条文字。当点击此菜单项,它 会调用menuItem1Touched方法。在程序内部,CCMenuItemFont只是简单的生成 一个CCLabel。如果你的场景中已经有一个CCLabel,你可以把它与 CCMenuItemLabel类结合在一起使用。
——————————————————–
二.图像菜单。
  1. 01.- (id)init

  2. 02.{

  3. 03.    self = [super initWithColor:ccc4(255, 0, 255, 255)];

  4. 04.    if(self){

  5. 05.       //初始化样式

  6. 06.        CCSprite *menuOne = [CCSprite spriteWithFile:@"player.png"];  

  7. 07.        menuOne.color = ccBLACK;

  8. 08.        //点击后的样式(颜色改变)

  9. 09.        CCSprite *sMenuOne = [CCSprite spriteWithFile:@"player.png"];

  10. 10.        sMenuOne.color = ccRED;

  11. 11.        //加入到精灵菜单CCMenuItemSprite,并设置调用方法

  12. 12.        CCMenuItemSprite *sMenu = [CCMenuItemSprite itemFromNormalSprite:menuOne selectedSprite:sMenuOne target:self selector:@selector(imageMenuOne)];

  13. 13.        CCSprite *menuTwo = [CCSprite spriteWithFile:@"icon.png"];

  14. 14.        menuTwo.color = ccBLACK;

  15. 15.        CCSprite *sMenuTwo = [CCSprite spriteWithFile:@"icon.png"];

  16. 16.        sMenuTwo.color = ccRED;

  17. 17.        CCMenuItemSprite *tSMenu = [CCMenuItemSprite itemFromNormalSprite:menuTwo selectedSprite:sMenuTwo target:self selector:@selector(imageMenuTwo)];

  18. 18.

  19. 19.        CCMenu *menu = [CCMenu menuWithItems:sMenu,tSMenu, nil];//用菜单项生成菜单

  20. 20.        [menu alignItemsVerticallyWithPadding:20];//排列对齐 *这个很重要,如果没有菜单将重叠在一起

  21. 21.        menu.position = ccp(size.width/2, size.height/2); //坐标

  22. 22.        [self addChild:menu z:0 tag:1];//加入到层

  23. 23.

  24. 24.

  25. 25.    }

  26. 26.

  27. 27.    return self;

  28. 28.

  29. 29.}

  30. 30.

  31. 31.- (void)imageMenuOne

  32. 32.{

  33. 33.    CCLOG(@"图像菜单一");

  34. 34.}

  35. 35.- (void)imageMenuTwo

  36. 36.{

  37. 37.    CCLOG(@"图像菜单二");

  38. 38.}
  39. 复制代码
复制代码
使用图像创建菜单可以使用CCMenuItemImage或CCMenuItemSprite。CCMenuItemImage,它利用图片文件 生成菜单项,内部实际上使用了CCSprite来实现。
CCMenuItemSprite。我认为这个类使用起来更加方便,因为它可以重复 利用已有的精灵作为参数。你可以改变同一个图片的颜色,作为显示触摸后高 亮效果的图片。当然其中还有很多属性可以自己设置,比如点击后图像放大等。
——————————————————–
三.开关菜单。

  1. 01.- (id)init

  2. 02.{

  3. 03.    self = [super initWithColor:ccc4(255, 0, 255, 255)];

  4. 04.    if(self){

  5. 05.CCMenuItemFont *menuOne = [CCMenuItemFont itemFromString:@"开启声音"];

  6. 06.        CCMenuItemFont *menuTwo = [CCMenuItemFont itemFromString:@"关闭声音"];

  7. 07.

  8. 08.        CCMenuItemToggle *tMenu = [CCMenuItemToggle itemWithTarget:self selector:@selector(openSound:) items:menuOne,menuTwo, nil];

  9. 09.        CCMenu *menu = [CCMenu menuWithItems:tMenu, nil];//用菜单项生成菜单

  10. 10.        menu.position = ccp(size.width/2, size.height/2);//坐标

  11. 11.        [menu alignItemsVerticallyWithPadding:20]; //排列对齐 *这个很重要,如果没有菜单将重叠在一起

  12. 12.        [self addChild:menu z:0 tag:2];

  13. 13.

  14. 14.    }

  15. 15.

  16. 16.    return self;

  17. 17.

  18. 18.}

  19. 19.

  20. 20.- (void)openSound:(id)sender{

  21. 21.

  22. 22.    CCLOG(@"声音开关");

  23. 23.    //可以在此方法里进行相应的功能编辑

  24. 24.}
  25. 复制代码
复制代码
CCMenuItemToggole只接受两个继承自CCMenuItem的对象作为参数,当用户点击 菜单时,菜单将会在两个菜单项之间进行切换。你可以在CCMenuItemToggle里 使用文字标签或者图片。CCMenu本身被生成和放置在场景中。因为所有菜单项都是CCMenu的子节 点,它们放置的位置都是相对于CCMenu的。为了不让菜单互相叠加在一起,你 必须调用一个CCMenu的排列对齐方法, alighItemsVerticallyWithPadding方法。因为CCMenu包含了所有的菜单项,你可以通过动作来让它们一起滚动。这会让 你的菜单看上去不那么呆板。
下面列出了以上菜单形式的图形界面,
[/url][/url][url=http://www.helmsmansoft.com/wp-content/uploads/2011/11/20111404.png][url=http://www.helmsmansoft.com/wp-content/uploads/2011/11/20111405.png]

论坛徽章:
0
2 [报告]
发表于 2012-02-26 22:42 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP