• 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协议就可以了。

  • 相关阅读:
    JS学习专辑(3) DOM
    JS学习专辑(4) 变量作用域和语句
    JS学习专辑(6) 函数
    JS学习专辑(2) BOM
    WPF Adorner学习(1)
    C# 递归
    IEnumerable和IEnumerator
    C# 索引器
    JS学习专辑(5) 对象和数组
    JS学习专辑(1) 入门
  • 原文地址:https://www.cnblogs.com/gaoxiao228/p/2461674.html
Copyright © 2020-2023  润新知