zoukankan      html  css  js  c++  java
  • ios游戏开发--cocos2d学习(2)

    在第一节中简单介绍了2d项目模板HelloWorld的基础代码,并做了一点小小的改变,像触摸接收、旋转、移动和颜色转变序列CCSequence的使用等等,2d本身封装好了很多方便使用的动作,只需要调用即可,那么这节就来了解更多的方法,并去熟悉我们学过的方法。
    • 单例:cocos2d很好的利用了单例设计模式,单例是在程序生命周期里只被实例化过一次的类,为了确保这一点,我们利用类的一个静态方法来生成和访问对象,就是我们已经见过的的以“shared”开头的方法,而不是用 alloc/init初始化方法。如OC中的UIApplication对象,我们只能通过sharedApplication来共享这个对象,而不是创建它,它是一个单例对象,只有一个,管理全局程序。cocos2d中有一些常用到的cocos2d 单例类,最常用的就是CCDirector(导演类):CCDirector* sharedDirector = [CCDirector sharedDirector];
    • 场景图:
                ios游戏开发--cocos2d学习(2)
    在最上面,放置场景节点,在第一节说过,我们总是在场景中布置我们的层,在层中放入元素精灵,层直接跟精灵节点打交道,它可以接收触摸和加速计的输入。图层下直属有3个节点:玩家(PlayerSprite)、游戏得分(ScoreLabel)和游戏菜单(IngameMenu),但你会注意到PlayerSprite节点中有个子节点PlayerWeaponSprite(武器),它是附加在玩家身上的,如果PlayerSprite移动,旋转或放大缩小,PlayerWeaponSprite将会跟着做同样的事情而不需要额外的代码。这就是场景图的强大之处:你对一个节点施加的影响将会影响到它的所有子节点。
    • CCNode:一个最重要的类。
    所有节点都有一个共同的父类:CCNode。它定义了所有节点都通用的属性和方法。  
                ios游戏开发--cocos2d学习(2)
    图中显示了我们最常用的类,只用这些类我们就可以制作出很有意思的游戏。

    以下是一些处理子节点 的方法: 

    1. 生成一个新的节点 :

      CCNode* childNode = [CCNode node];
    2. 将新节点添加为子节点:

      //新节点作为一个已有节点的子节点(如之前的武器节点附加在玩家节点上)
         [myNode addChild:childNode z:0 tag:123];
      //z决定了节点的绘制顺序;tag标记该节点

    3. 获取子节点://"getChildByTag:"
      CCNode* retrievedNode = [myNode getChildByTag:123];

    4. 通过tag删除子节点;cleanup会停止任何运行中的动作: [myNode removeChildByTag:123 cleanup:YES];

    5. 通过节点指针删除节点:
      [myNode removeChild:retrievedNode];

    1. 删除一个节点的所有子节点:
      [myNode removeAllChildrenWithCleanup:YES];

    2. 从myNode的父节点删除myNode:
      [myNode removeFromParentAndCleanup:YES]; 

    • 动作(Actions):贯穿整个游戏的核心
    节点都可以运行动作。我们会不断的接触到一个又一个动作,它总是带来新的视觉体验,丰富我们的游戏,让它看起来更完美。首先要了解一些基本的动作:移动、旋转和缩放:
    1. //闪烁动作
          CCAction* action = [CCBlink actionWithDuration:10 blinks:20]; 

      action.tag = 234;

      //旋转动作

      CCRotateBy *rotateBy=[CCRotateBy actionWithDuration:20 angle:360];

      //移动动作

      CCMoveTo *moveTo=[CCMoveTo actionWithDuration:3 position:CGPoint(200,300)];

      //除了动作本身,还可以给动作添加效果,如:逐渐加速、无限重复

      1、重复-CCRepeatForever *repeat=[CCRepeatForever actionWithAction:myAction];

      2、逐渐加速-CCEaseInOut *ease=[CCEaseInOut actionWithAction:myAction];

      //也可以对某个节点施加一系列动作,使用动作序列让其按顺序执行

      CCSequence *sequence=[CCSequence actions:action1,action2,action3,nil];

      CCRepeatForever *repeat=[CCRepeatForever actionWithAction:sequence];

    2. 运行这个动作: [myNode runAction:action];

    3. 动作也可定义标记tag,然后用tag获取:
         CCAction* retrievedAction = [myNode getActionByTag:234];

    4. 你可以用tag或动作指针停止相关联的动作: 

      [myNode stopActionByTag:234];[myNode stopAction:action];

    你可以停止所有在此节点上运行的动作: [myNode stopAllActions]; 

    • 预定信息:类似于OC中的时间片,每隔一段时间就会调用一次方法,只不过开启时间片是在预定里:(个人理解......)
     -(void)scheduleUpdates

    {

    [self schedule:@selector(myMethods) interval:0.1f];//interval:时间间隔(秒)

    }

    使用selector时,最好开启报警设置Build->Undeclared Selector打钩,保证方法选择正确。

     停止某个指定的选择器[self unschedule:@selector(method)]; 

    • 场景CCScene
    它一般都是在CCLayer对象里 通过+(id)scene这个静态方法来创建的。

    +(id) scene

    {

    CCScene *scene = [CCScene node];  CCLayer* layer = [HelloWorld node];  [scene addChild:layer];   return scene;
    1)
    第一个创建场景的地方是在AppDelegate中directorDidReshapeProjection中:[[CCDirector sharedDirector] runWithScene:[HelloWorld scene]];
                    
            
            
                    
    

    2)在其它情况下,用replaceScene方法来替换已有的场景:

    
    [[CCDirector sharedDirector] replaceScene:[HelloWorld scene]]; 3)还有另外两个方法:pushScene(推进场景)和popScene(弹出场景) 但是最好是对“一个”常用的场景采用这种方式,否则如果多个场景都这样推进弹出,最后可能忘记哪个推进了哪个弹出了,导致内存使用浪费。 
    • 过渡效果CCTransitionScene :尽量不用,因为玩家不喜欢,耽误时间
    简单介绍一下。所有过渡效果的类都继承自CCTransitionScene。

     过渡效果只给场景转换代码 增加了一行代码而已。如:

    CCFadeTransition *tran=[CCFadeTransition transitionWithDuration:1 scene:[myScene scene withColor:ccWHITE];//白色渐隐到myScene场景

    别忘记了改变之前要转到myScene的原场景,这时要

    [[CCDirector sharedDirector] replaceScene:tran];


  • 相关阅读:
    Angular 中使用第三方模块 axios 请求数据
    angular 创建服务
    Promise和RxJS处理异步对比
    ES6中的迭代器(Iterator)和生成器(Generator)
    async await
    Ajax分析
    JSTL
    EL
    Spring-常用依赖及配置
    Spring-AOP的三种方式
  • 原文地址:https://www.cnblogs.com/gl5773477/p/3971145.html
Copyright © 2011-2022 走看看