cocos2d 学习笔记

CCDirector类,简称Director(导演),是cocos2d游戏引擎的核心。

 

Director是一个单例:它保存着 cocos2d的全局配置设定,同时管理着cocos2d的场景。

 

Director的主要用处如下:
1. 访问和改变场景
2. 访问cocos2d的配置细节
3. 访问视图(OpenGL,UIView,UIWindow) 4. 暂停,恢复和结束游戏

5. 在UIKit和OpenGL之间转换坐标

 

 

除了场景本身,每一个节点只有一个父节点,但是可以有任意数量的子节点。

在最上面,你总是放置场景节点(MyScene),通常跟着的 是一个层节点(MyLayer)。

在cocos2d里,层节点的作用是接收触摸和加速计的输入。

所有节点都有一个共同的父类:CCNode。

 

它定义了许多除显示节点外的通用的属性和方法

 

CCNode是cocos2d中最重要的类。所有类都继承自CCNode。CCNode定义了通用的属性和 方法。

 

 

addChild中的z参数决定了节点的绘制顺序。拥有最小z值的节点会首先被绘制; 拥有最大z值的节点最后一个被绘制。如果多个节点拥有相同的z值,他们的绘 制顺序将由他们的添加顺序来决定。当然,这个规则只适用于像sprites那样有 视觉表现的节点。

 

scheduleUpdate方法没有停止预定信息的功能

如果你想之后停止对某个指定更新方法的预定信息的话

建议使用

(void) scheduleUpdates
{

       [self schedule:@selector(updateTenTimesPerSecond:) interval:0.1f];
}
-(void) updateTenTimesPerSecond:(ccTime)delta
{

// 此方法将根据时间间隔来调用,每秒10次

}

 

 

以下代码会停止节点的所有选择器,包括那些已经在scheduleUpdate里面设置 了预定的选择器:
[self unscheduleAllSelectors];

以下代码会停止某个指定的选择器(假设选择器名称是updateTenTimesPerSecond): [self unschedule:@selector(updateTenTimesPerSecond:)];

注:此方法不会停止scheduleUpdate中设置的预定更新方法。

 

CCScene对象总是场景图里面的第一个节点。通常CCScene的子节点都是继承自 CCLayer。CCLayer包含了各个游戏对象。

 

 

因为大多数情况下场景对象本身不包 含任何游戏相关的代码,而且很少被子类化,所以它一般都是在CCLayer对象里通过+(id)scene这个静态方法来创建的。

 

+(id) scene
{

  CCScene *scene = [CCScene node];
  CCLayer* layer = [HelloWorld node];
  [scene addChild:layer];
  return scene;

}

 

和场景一样,层没有大小的概念。层是一个组织的概念。比如,如果你对一个
层使用动作,那么所有在这个层上的物体都会受到影响。

很多情况下,你可能想知道触摸是在哪里开始的。因为触摸事件由Cocoa Touch API接收,所以触摸的位置必须被转换为OpenGL的坐标。以下是一个用来转换坐 标的方法:
-(CGPoint) locationFromTouches:(NSSet *)touches

{

UITouch *touch = [touches anyObject];
CGPoint touchLocation = [touch locationInView: [touch view]];
return [[CCDirector sharedDirector] convertToGL:touchLocation];

}

接收加速计事件

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

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

CCSprite是最常用到的类。它使用图片把精灵(sprite)显示在屏幕上。生成 精灵最简单的方法是把图片文件加载进CCTexture2D材质里面,然后将它赋给精 灵。


	

定位点揭秘

每个节点都有一个定位点,但是只有当此节点拥有贴图时,这个定位点才有用。 默认情况下,anchorPoint属性设置为(0.5,0.5)或者贴图尺寸的一半。它是 一个抽象的因素,一个乘数,而不是一个特定的像素尺寸。

anchorPoint定义的是贴图相对于节点位置的偏移。你可以通过把贴图的宽和高 乘以定位点来得到贴图的偏移值。顺便提一下,有一个只读的 anchorPointPixels属性可以得到贴图的像素偏移值,所以你不需要自己计算。

 

舒缓动作

CCEaseAction类让cocos2d的动作更加有用。“舒缓动作”允许你改变在一段时 间内发生的动作效果。例如,如果你在节点上应用CCMoveTo动作,此节点在整 个移动过程中将会保持同一个速度。而如果你使用CCEaseAction的话,你就可 以让节点慢慢启动,然后加速向目标移动,或者反过来(快速启动,慢慢减速 到达目标)。或者你也可以让节点移动到超过目的地一些,然后再反弹回来。 “舒缓动作”可以帮助你创造出通常很费时间才能做出来的动画。以下代码演 示了如何应用舒缓动作来改变一个普通动作的行为。rate参数是用来决定舒缓 动作的明显程度。此参数只有在大于1的情况下才能看到舒缓动作的效果:

// 我想让myNode在3秒钟之内移动到100,200坐标点
CCMoveTo* move = [CCMoveTo actionWithDuration:3 position:CGPointMake(100, 200)]; // 节点应该慢慢启动,然后在移动过程中减速
CCEaseInOut* ease = [CCEaseInOut actionWithAction:move rate:4];
[myNode runAction:ease];

在上述例子中,舒缓动作是在节点上运行的,而不是在移动动作上运行

 

iOS游戏首选的图片格式是PNG,Portable Network Graphics。它虽然是种

压缩格式,但是与JPG不同的是,PNG是无损压缩,它将源图片的所有像素都保 留了。你也可以把图片存为无压缩JPG格式,但是一般情况下同样的图片用PNG格式比无压缩JPG格式要小一些。不过,这个区别只影响应用程序的大小,它和内存的使用无关

 

 

 

 

iOS设备使用的ARM CPU不支持直接在硬件上做除法, 乘法一般会快一些。

 

 

 

规则一:永远不要在一个节点的init方法中调用CCDirector的

replaceScene方法。规则二:请遵守规则一。不遵守规则的后果是程序崩溃。

Director无法容忍一个节点在初始化的同时进行场景替换。

 
 

 

你可能认为只有CCLayer才能接收触摸输入事件。

实际上,通过直 接使用CCTouchDispatcher,你可以让任何类接收触摸事件。

你只需要在类里实 现CCStandardTouchDelegate协议或者CCTargetedTouchDelegate协议就可以了。

 

 

posted @ 2012-04-21 16:54  高笑228  阅读(359)  评论(0编辑  收藏  举报