- “接收触摸事件”:
CCLayer类是用来接收触摸输入的。不过你要首先启用这个功能才可以使用它。
self.isTouchEnabled = YES;//此项设定最好在init方法中设置。可以在任何时间将其设置为NO或YES。
一旦启用isTouchEnabled属性,许多与接收触摸输入相关的方法将会开始被调用:
当手指首次--触摸到屏幕--时调用的方法:
-(void) ccTouchesBegan:(NSSet
*)touches withEvent:(UIEvent*)event手指在屏幕上--移动--时调用的方法:
-(void) ccTouchesMoved:(NSSet
*)touches withEvent:(UIEvent*)event- 当手指--从屏幕上提起--时调用的方法:
-(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];//设置垂直方向上的间距