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

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];//设置垂直方向上的间距

最新文章

  1. SAP HANA专题分析目录
  2. iOS 音乐
  3. Swift完整项目打包Framework,嵌入OC项目使用
  4. 利用PinYin4j 实现List中的对象按数字,字母, 汉字排序
  5. Tesseract训练笔记
  6. Adding Multithreading Capability to Your Java Applications
  7. 关于SpringMVC和Struts2的区别
  8. 修改Hosts文件
  9. python unittest 测试笔记(二):使用Requests
  10. maven使用阿里代理下载
  11. apt-get install 出问题怎么办?
  12. 使用VBA轻松实现汉字与拼音的转换
  13. 字符串拼接引发的BUG
  14. Django 配置(一)开启服务
  15. Qt编写高仿苹果MAC电脑输入法(支持触摸滑动选词)
  16. JS基础概念
  17. c++以代理的方式来实现接口化编程
  18. Java中apache下面FtpClient主动模式和被动模式
  19. [COGS 2551] 新型武器
  20. Windows Server2016服务器系统创建域服务器

热门文章

  1. springMVC上传图片
  2. ExtJS4.2学习(二)Ext统一组件模型——Panel
  3. 关于ax+by=c的解x,y的min(|x|+|y|)值问题
  4. uva 10306
  5. Samza文档翻译 : Comparison Introduction
  6. Linux下去掉^M的方法
  7. python url编码
  8. Linux系统下如何配置SSH?如何开启SSH?
  9. QListWidget代码刷新界面
  10. android系统平台显示驱动开发简要:LCD基本原理篇『一』