------------继续上一节的内容。
  • “接收触摸事件”:

CCLayer类是用来接收触摸输入的。不过你要首先启用这个功能才可以使用它。

self.isTouchEnabled = YES;//此项设定最好在init方法中设置。可以在任何时间将其设置为NO或YES。

一旦启用isTouchEnabled属性,许多与接收触摸输入相关的方法将会开始被调用:

  1. 当手指首次--触摸到屏幕--时调用的方法:
    -(void) ccTouchesBegan:(NSSet
    *)touches withEvent:(UIEvent*)event

  2. 手指在屏幕上--移动--时调用的方法:
    -(void) ccTouchesMoved:(NSSet
    *)touches withEvent:(UIEvent*)event

  3. 当手指--从屏幕上提起--时调用的方法:

-(void) ccTouchesEnded:(NSSet *)touches
withEvent:(UIEvent*)event

触摸事件由Cocoa Touch
API接收,所以触摸的位置必须被转换为OpenGL的坐标。以下是一个用来转换坐标的方法:

-(CGPoint)locationFromTouches:(NSSet *)touches

{

UITouch *touch =
[touches anObject];//将触摸产生的对象从NSSet集合中实体化

//获取触摸点在视图中的位置

CGPoint
touchLocation = [touch locationInView:[touch view]];

return
[[CCDirector sharedDirector] convertToGL:touchLocation];

}

现在,使用一套有点不一样的方法来代替默认的触摸输入处理方法。它们几乎完全一样,除了一点:用
(UITouch *)touch 代替 (NSSet *)touches 作为方法的第一个参数:
-(BOOL)
ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{}

-(void) ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {}  -(void) ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event {}

这里很重要的一点是:ccTouchBegan返回的是一个布尔值(BOOL)。如果你返 回了YES,那就意味着你不想让当前的触摸事件传导到其它触摸事件处理器。你实际上是“吞下了”这个触摸事件。

  • “接收加速计事件”:

和触摸输入一样,加速计必须在启用以后才能接收加速计事件:

self.isAccelerometerEnabled = YES;

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{

       CCLOG(@"acceleration: x:%f / y:%f / z:%f", acceleration.x, acceleration.y,
acceleration.z);

}

由于在模拟器上不能够测试加速计事件,所以就咱不多做介绍。

  • CCSprite最常用的类:精灵----游戏中的元素

它使用图片把精灵(sprite)显示在屏幕上,必须把需要用到的图片文件放进Xcode的Resources组中:

CCSprite * player=[CCSprite spriteWithFile:@"玩家.png"];

[self addChild:player];

下面说一下关于精灵贴图的位置和精灵的位置关系,这个对于新手来说是个困惑的地方。

有两个位置属性:position和anchorPoint

positon:永远是中心点的位置。我们对精灵使用这个属性,就是确定中心点的位置。

定位点--anchorPoint:在给精灵附上图片后才有意义,其实指的就是将要加进来的图片它左下角的位置,只不过这个位置是个相对位置,实际位置是精灵中心点的位置乘以anchorPoint的值。例如精灵在位置(100,100),图片大小为100X100,如果anchorPoint为(0.5,0.5),则图片“左下角”的位置为(100x0.5,100x0.5),那么图片实际中心位置为(100,100),这就和精灵完全匹配,这也是为什么anchorPoint多设置为(0.5,0.5)的原因,同样如果anchorPoint为(0,0),则图片在屏幕左下角,中心在(50,50),也完整的显示出来。

  •  CCLabel--显示文字:有3种类型:CCLabelTTF、CCLabelBMFont、CCLabelAtlas

CCLabel的操作常用的就几个,设置文字内容,字体,大小以及对齐方式:

label =
[CCLabel labelWithString:@"text" fontName:@"AppleGothic"
fontSize:32];

不应该经常改变文字,重建文字标签的贴图非常耗时。

label.position =
ccp(100,100);//ccp就是CGPoint,这里写成CGPointMake,效果一样

label.anchorPoint=ccp(1,1);//设置图片的“左下角”位置,即(100,100),即中心点在标签右上角

  • 菜单--CCMenu类,它只支持CCMenuItem节点作为它的子节点

//更改CCMenuItemFont的默认属性

[CCMenuItemFont
setFontName:@"Helvetica-BoldOblique"];//字体类型

[CCMenuItemFont
setFontSize:26];//字体大小

//创建一个文字类型的菜单选项item1,并制定选择器

CCMenuItemFont *item1=[CCMenuItemFont
itemFromString:@"Setting" target:self
selector:@selector(touchedMethod)];//CCMenuItemFont只是简单的生成一个CCLabel

//创建一个精灵类型的菜单选项,使用已有的精灵生成一个菜单项

CCSprite *normal=[CCSprite
spriteWithFile:@"Icon.png"];//正常状态时的精灵

normal.color=ccRED;

CCSprite *selected=[CCSprite
spriteWithFile:@"IconS.png"];//被选择状态时的精灵

selected.color=ccGREEN;

CCMenuItemSprite *item2=[CCMenuItemSprite
itemFromNormalSprite:normal
selectedSprite:selected target:self
selector:@selector(touchedMethod)];//CCMenuItemSprite其实就是一个CCMenuItemImage

//制作第三种类型的菜单项:可切换菜单项CCMenuItemToggle

CCMenuItemFont *on=[CCMenuItemFont
itemFromString:@"ON"];

CCMenuItemFont
*off=[CCMenuItemFont itemFromString:@"OFF"];

CCMenuItemToggle *item3=[CCMenuItemToggle
itemWithTarget:self
selector:@selector(touchedMethod) items:on,off,nil];

CCMenuItemToggole只接受两个继承自CCMenuItem的对象作为参数,当用户点击时,会在两个状态之间进行切换,这里是两种状态的文字,当然你也可以在CCMenuItemToggle里使用图片。

//最后集成一个菜单

CCMenu *menu = [CCMenu menuWithItems:item1,item2,item3,nil];

menu.position =
ccp(230,160);

[self
addChild:menu];

//注意菜单项的排列对齐,避免菜单项的层叠,这个方法必须写

[menu
alignItemsVerticallyWithPadding:40];//设置垂直方向上的间距

ios游戏开发--cocos2d学习(3)的更多相关文章

  1. ios游戏开发--cocos2d学习(2)

    在第一节中简单介绍了2d项目模板HelloWorld的基础代码,并做了一点小小的改变,像触摸接收.旋转.移动和颜色转变序列CCSequence的使用等等,2d本身封装好了很多方便使用的动作,只需要调用 ...

  2. ios游戏开发--cocos2d学习(1)

    学习cocos2d需要一定的编程基础,最好了解objective-c的语法.至于下载和安装的过程网上有很多,这里不多介绍,直接进入项目的学习. 创建一个cocos2d项目,直接运行,效果如图: 左下角 ...

  3. 开发者经验谈:如何一天时间搞定iOS游戏开发?

    开发者经验谈:如何一天时间搞定iOS游戏开发? 在一天时间里将完成iPhone游戏开发由梦想变为现实? 本文作者给出了从创意转变成现实的详细答案.使用苹果原生游戏引擎SpriteKit,遵循一定的原则 ...

  4. ios游戏开发 Sprite Kit教程:初学者 1

    注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...

  5. CocosCreator游戏开发---菜鸟学习之路(一)

    PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...

  6. cocos2d-x ios游戏开发初认识(六) 渲染的优化

    做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大.这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染 ...

  7. 2011斯坦福大学iOS应用开发教程学习笔记(第一课)MVC.and.Introduction.to.Objective-C

    blog.csdn.net/totogo2010/article/details/8205810  目录(?)[-] 第一课名称 MVC and Introduction to Objective-C ...

  8. cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储

    我们知道.一个游戏少不了声音.一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来.顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: ...

  9. cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測

    玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...

随机推荐

  1. 1065: [NOI2008]奥运物流 - BZOJ

    Sample Input4 1 0.52 3 1 310.0 10.0 10.0 10.0Sample Output30.00 推荐题解:http://blog.csdn.net/whjpji/art ...

  2. 4.0 spring-注册解析的Bean

    1.0 registerBeanDefinition 对于配置文件,解析也解析完了,装饰也装饰完了,对于得到的BeanDefinition已经可以满足后续的使用了,唯一剩下的工作就是注册了, 也就是: ...

  3. Mybatis 示例之 SelectKey(转)

    参考:http://blog.csdn.net/isea533/article/details/21153791 SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问 ...

  4. 通过SQL Server 2008 访问MySQL(转)

    在公司中经常会遇到部署多种数据库环境的情况,对于开发人员来说经常在不同数据库之间转换确实有些繁琐,本篇将介绍从SQL Server 操作MySQL 数据库的方法. 数据库测试环境 1. SQL Ser ...

  5. POJ 1220 NUMBER BASE CONVERSION(较复杂的进制转换)

    题目链接 题意 : 给你一个a进制的数串s,让你转化成b进制的输出. A = 10, B = 11, ..., Z = 35, a = 36, b = 37, ..., z = 61,0到9还是原来的 ...

  6. HDU4607+BFS

    /* bfs+求树的直径 关键:if k<=maxs+1 直接输出k-1: else: k肯定的是包括最长路.先从最长路的起点出发,再走分支,最后到达最长路的终点. 因此是2*(k-(maxs+ ...

  7. java String.split方法是用注意点(转)

    转自:http://www.blogjava.net/fanyingjie/archive/2010/08/05/328059.html 在java.lang包中有String.split()方法,返 ...

  8. 多线程 (四)GCD

    学习GCD要掌握几个概念 任务:需要执行的代码块可以看作一个任务 队列:把任务放到队列里,遵循先进先出的原则 队列又分为串行队列和并行队列 串行队列:顺序执行 并发队列:同时执行多个任务 同步:在当前 ...

  9. ajax readyState的五种状态详解

    通过ajax的readyState的值,我们可以知道当前的这个http请求处于什么状态.对于web的调试是比较重要的. readyState 状态说明: (0)未初始化 此阶段确认XMLHttpReq ...

  10. 编程添加"作为服务登录”权利(包括例子和API)

    搜索"log on as a service programmatically" https://msdn.microsoft.com/en-us/library/windows/ ...