目录:


Cocos2D游戏引擎介绍


Cocos2D游戏引擎安装


Cocos2D基本概念


Cocos2D游戏动作


Cocos2D的Touch事件


帧动画序列制作工具介绍






一、Cocos2d游戏引擎介绍


Cocos2d是一个开源框架,用于构建2D游戏、演示程序和其他图形界面交互应用等.



主要功能:



1.流程控制(Flow control):非常容易地管理不同场景(scenes)之间的流程控制



2.精灵(Sprites):快速而方便的精灵



3.动作(Actions):告诉精灵们该做什么。可组合的动作如移动(move)、旋转(rotate)和缩放(scale)等更多



4.特效(Effects):特效包括波浪(waves)、旋转(twirl)和透镜(lens)等更多



5.平面地图(Tiled Maps):支持包括矩形和六边形平面地图



6.转换(Transitions):从一个场景移动到另外一个不同风格的场景



7.菜单(Menus):创建内部菜单



8.文本渲染(Text Rendering):支持标签和HTML标签动作



9.文档(Documents):编程指南 + API参考 + 视频教学+ 很多教你如何使用的简单测试例子



10.基于Pyglet:没有外部的依赖



11.基于OpenGL:支持硬件加速







二、Cocos2d游戏引擎安装



说明:从0.99.0版本开始,Cocos2d-iPhone的模板类要求苹果SDK3.0及以上版本。



1.下载:cocos2d-iphone最新版0.99.5;



2.打开Terminal工具,进入Cocos2d-iPhone-0.99.5目录下;



3.执行命令:./install_template.sh

4.安装完毕后启动Xcode,打开菜单File->New Project,出现如下视图










三、Cocos2d基本概念


开发cocos2d应用程序,必须先了解如下四个概念:


1.Scenes(场景)


   是app 工作流上独立块。一个app可能拥有多个scenes, 但在任何时候只能有一个是激活状态的。一个CCScene对象由一个或多个layers组成,layers之间是前后相连的。layer提供了scene的外观 appearance和行为behavior.


2.Director(导演)


    CCDirector负责scenes之间的前进或后退。CCDirector是singleton模式的共享的对象,它知道当前哪个scene是激活。


3.Layers(层)


    CCLayer对象定义了可描绘的区域,定义了描绘的规则。当编写cocos2d程序的时候,大部分工作就是编写CCLayer的子类去实现所要的效果。 


4.Sprites(精灵)


    sprite对象就是一个可以移动、选择、伸缩、动画的2d图形,CCSprite 对象的子成员中可以包含其它的CCSprite 对象。






四、Cocos2d游戏动作



(一)基本动作



1.瞬时动作——马上就完成的动作


放置——Place


隐藏——Hide


显示——Show


可见切换——ToggleVisibility








2.延时动作——完成需要一定的时间


移动到——CCMoveTo


移动——CCMoveBy


跳跃到——CCJumpTo


跳跃——CCJumpBy


贝塞尔——CCBezierBy


放大到——CCScaleTo


放大——CCScaleBy


旋转到——CCRotateTo


旋转——CCRotateBy


闪烁——CCBlink


色调变化到——CCTintTo


色调变化——CCTintBy


变暗到——CCFadeTo


由无变亮——CCFadeIn


由亮变无——CCFadeOut



  延时动作就是指动作的完成需要一定时间。因此,actionWithDuration是延时动作执行是第一个参数,延时动作的共同基类是CCIntervalAction。



(二)组合动作



组合动作就是指按照一定的次数将不同的基本动作组合起来,形成连贯的一套组合动作。



组合动作主要包括以下几类:


序列CCSequence:线序排列若干个动作,然后按先后次序逐个执行。


同步Spawn:同时并列执行若干个动作,但要求动作都必须是可以同时执行的。


重复有限次数Repeate:重复执行有限的次数的动作。


反动作Reverse:反向或逆向执行某个动作,支持针对动作序列的反动作序列。


动画Animation:就是让精灵自身的连续执行一段影象,形成模拟运动的效果。

无限重复RepeatForever:无限期执行某个动作或动作序列,直到被停止。




(三)CallFunc Actio



CallFunc Action 允许你可以在一个action里面调用一个方法。在序列action里面的最后一个调用,会非常有用。 



 Example:

id actionTo = [MoveTo actionWithDuration: 2 position:ccp(s.width-40,s.height-40)];
 id actionBy = [MoveByactionWithDuration:2  position: ccp(80,80)];
 id actionCallFunc = [CallFunc actionWithTarget:self selector:@selector(doATask)];
 id actionSequence = [Sequence actions: actionTo, actionBy, actionCallFunc, nil]; 
 -(void) doATask
 {            //somecode      
             }

有两种类型的CallFunc,分别是CallFuncN和CallFuncND


 CallFuncN 把node当作参数。


 CallFuncND 需要node和一个指向某个数据的指针。



Example:


id actionCallFuncN = [CallFuncN actionWithTarget:self selector:@selector(doATaskN:)];
 id actionCallFuncND = [CallFuncND actionWithTarget:self selector:@selector(doATaskN:data:) [/pre]data:pointerToSomeData];
 - (void) doATaskN: (id)node
 {//some code
 }
 - (void) doATaskND: (id)node data:(void*)d
 {//some code
 }



(四)速度变化



基本动作和组合动作实现了针对精灵的各种运动、动画效果的改变,但这样的改变的速度是不变的,


通过CCEaseAction为基类的类系和CCSpeed类可以很方便的修改精灵执行动作的速度:由快至慢还是由慢变快。


EaseIn:由慢至快。


EaseOut:由快至慢。


EaseInOut:由慢至快再由快至慢。


EaseSineIn:由慢至快。


EaseSineOut:由快至慢。


EaseSineInOut:由慢至快再由快至慢。


EaseExponentialIn:由慢至极快。


EaseExponentialOut:由极快至慢。


EaseExponentialInOut:由慢至极快再有极快至慢。

Speed:人工设定速度,还可通过SetSpeed不断调整。




五、Cocos2d的Touch事件



iPhone OS通过NSSet传递硬件传感器传来的各种组合触摸信息。


事件处理框架

1.(void)touchesBegan:(NSSet *)touches 
  
   
  withEvent:(UIEvent *)event {}
   

    ● 
  
   

    2.(void)touchesMoved:(NSSet *)touches 
  
   
  withEvent:(UIEvent *)event {}
   

    ● 
  
   

    3.(void)touchesEnded:(NSSet *)touches 
  
   
  withEvent:(UIEvent *)event {}
   

    ● 
  
   

    4.(void)touchesCancelled:(NSSet *)touches 
  
   
  withEvent:(UIEvent *)event {}


事件处理机制


核心:就是如何将系统用户输入信息传递给每个Layer对象。


1.接管:从系统iPhoneOS的标准UIView获得触摸输入。


2.分发:按照预先定义好的逻辑分发给各种注册对象。


3.处理:注册对象之间如何协调响应用户的输入。








(六)帧动画序列制作工具——Zwoptex



在cocos2d中,大部分动画都是预先渲染好的位图。然后通过动画将各个图片序列在一起播放。


Zwoptex用途


1.将多个单独的PNG图片合并成一个大的PNG图片


2.将合并之前的每一个小PNG图片在合并之后PNG图片中的位置坐标以及图片大小等进行通过参数文件记录保存,供Cocos2d程序调用。






添加动画

利用软件Zwoptex制作的png和plist文件添加动画

   


// 将花朵的png图片序列和plist载入场景
         CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];
         [cacheaddSpriteFramesWithFile:@"Flower.plist"];
         idsheet = [CCSpriteSheet spriteSheetWithFile:@"Flower.png"
                     capacity:60];
         [selfaddChild:sheet];
         // 将花朵Sprite添加到场景中
         FlowerSprite *sprite = [FlowerSprite node];
         CGSize size = [[CCDirector sharedDirector] winSize];
         sprite.position = ccp(size.width / 2, size.height / 2);
         [selfaddChild:sprite];
       CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];
         NSMutableArray *frames = [[NSMutableArray array] retain];
         // 构造每一个帧的实际图像数据
         for (int i = 1; i <= FLOWER_SPRITE_SHEET_CAPACITY; i++) {
             NSString *frameName = [NSStringstringWithFormat:@"Flower%04d.png", i];
             CCSpriteFrame *frame = [cache spriteFrameByName:frameName];
             [framesaddObject:frame];
         }
         // 使用CCAnimation和CCRepeatForever构造一个一直重复的动画
         NSString *firstFrameName = [NSStringstringWithFormat:@"Flower%04d.png", 1];
         idsprite = [CCSprite spriteWithSpriteFrameName:firstFrameName];
         CCAnimation *animation = [CCAnimation animationWithName:@"Flower“ delay:1.0f / 30  frames:frames];
         [spriterunAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:animation restoreOriginalFrame:NO]]];
         // 将构造好的动画加入显示列表
         [self addChild:sprite];





播放声音

使用cocos2d的SimpleAudioEngine可以很简单的播放背景音乐和音效。


1,准备工作
    引入头文件:#import "SimpleAudioEngine.h"
 2,播放背景音乐
    [[SimpleAudioEngine sharedEngine] playBackgroundMusic:@"background.wav"];
 3,播放音效
    [[SimpleAudioEngine sharedEngine]playEffect:@"effect1.wav"];
 4,暂停背景音乐
    [[SimpleAudioEngine sharedEngine] pauseBackgroundMusic];
 5,预先加载背景音乐
    [[SimpleAudioEngine sharedEngine] preloadBackgroundMusic];
 
 使用CDAudioManager来更改音乐的属性(更改属性之前必须有背景音乐在播放)
 
 6,更改音量(音量大小从0到1)
    [CDAudioManager sharedManager].backgroundMusic.volume = 1.0f;
 7,循环播放N次背景音乐
    [CDAudioManager sharedManager].backgroundMusic.numberOfLoops = N;
 8,背景音乐停止时触发事件
    [[CDAudioManager sharedManager] setBackgroundMusicCompletionListener:self 
                                                                                                                selector:@selector()];