现在的位置: 首页 > 综合 > 正文

cocos2d-v1.0.0:“按图索骥”进行编码

2013年03月01日 ⁄ 综合 ⁄ 共 4299字 ⁄ 字号 评论关闭

这篇随笔主要围绕如何编码进行说明讲解。
  在程序开发过程中,我们往往发现,自己不知道编码从哪里开始入手。根本就没有思路吖!怎么写下去?下面就讲一下使用cocos2d进行游戏开发的编码该怎么入手。
  使用cocos2d的主要目的是进行游戏开发(这就是一句废话嘛「原因:大实话其实就是废话,地球人大概都知道吧」)
  那么,游戏本身最重要的是什么呢?一个字儿:动!(我是这么认为的,有不同意见的朋友,可以和大家分享一下)
  这就出现3个疑问:动作有哪些?动作的发出者是谁?动作是怎么动的?第3个疑问是最复杂的,也就是动作的处理逻辑啦,大家尽情发挥自己的创造力吧!所以这个问题不属于本文讲解的范围。
  那么,动作的发出者是谁呢? 不说大家就知道:当然是精灵啦,精灵就是游戏中的主角、主角的敌人及场景中的一些动物啦、小草啦什么的,您也可以不让它们动!我们的首要任务就是创造出精灵及动作,至于动作的逻辑,大家慢慢搞吧。
  那么,精灵和动作是从哪里来的呢?最常见的:图片!所以,我们的最终目的就是使用图片来创建精灵及动作。
  在cocos2d中,精灵用CCSprite类来表示,动作用CCAction类来表示。
  我们创建精灵「怎样创建CCSprite呢?关于这个问题,您可以在文章的最后得到解答」的目的是让其执行一系列动作,那么怎么样才可以让其执行动作呢?当您看了CCSprite类之后,发现好像没有哪个方法可以执行动作,这如何是好?不要忘了,CCSprite类是继承自CCNode的,所以可以去CCNode类中寻找我们想要的方法。
  在CCNode类中可以找到-(CCAction*) runAction:(CCAction*) action,该方法就是用来执行动作的,可是,这个方法用到了CCAction,现在还没有CCAction对象呢,该怎么办呢?
  CCAction类是比较独立的,它直接继承了NSObject类。看了CCAction类之后,感觉还是没有可以用来创建CCAction对象的方法,真是烦恼吖!
  在CCAction.h文件中,仔细的您就会发现CCAction有4个子类:CCFiniteTimeAction、CCRepeatForever、CCSpeed、CCFollow。此时,我们可以初步判断:创建CCAction对象的方法就在这4个类中。下面的任务就是在这4个类中寻找创建CCAction对象的方法了。
  在CCRepeatForever类中有
/** creates the action */
+(id) actionWithAction: (CCActionInterval*) action; 
/** initializes the action */
-(id) initWithAction: (CCActionInterval*) action;
两个方法,相信聪明的您一眼就可以看出它们的作用。
  在CCSpeed类中有
/** creates the action */
+(id) actionWithAction: (CCActionInterval*) action speed:(float)rate; 
/** initializes the action */
-(id) initWithAction: (CCActionInterval*) action speed:(float)rate;
两个方法,和CCRepeatForever类中的方法相似,只是多了一个参数而已。
  在CCFollow类中有
/** creates the action with no boundary set */
+(id) actionWithTarget:(CCNode *)followedNode;
/** creates the action with a set boundary */
+(id) actionWithTarget:(CCNode *)followedNode worldBoundary:(CGRect)rect;
/** initializes the action */
-(id) initWithTarget:(CCNode *)followedNode;
/** initializes the action with a set boundary */
-(id) initWithTarget:(CCNode *)followedNode worldBoundary:(CGRect)rect;
四个方法,第一个方法就是使用一个没有边界的集合来创建动作对象,第二个方法就是使用一个有边界的集合来创建动作对象,最后两个就不必说了吧,我相信大家都是很机灵的。
  现在,我们就选择一个类来创建动作对象。我就使用CCRepeatForever中的
+(id) actionWithAction: (CCActionInterval*) action;
方法给大家进行说明吧,如果您选择的方法与我的不同,您也可以使用“按图索骥”的方法来进行代码的编写。
  创建CCAction还要用到CCActionInterval对象呢,现在就创建CCActionInterval对象吧!在CCActionInterval类中有
/** creates the action */
+(id) actionWithDuration: (ccTime) d; 
/** initializes the action */
-(id) initWithDuration: (ccTime) d;
两个方法,它们都使用了ccTime作为参数,这个好像和图片没什么联系吧?也就是说,通过ccTime,我们不可能找到图片!怎么办?到 CCActionInterval的子类中找!CCActionInterval类有以下子类:CCSequence、CCRepeat、CCSpawn、CCRotateTo、CCRotateBy、CCMoveTo、CCMoveBy(继承自CCMoveTo类)、CCSkewTo、CCSkewBy(继承自CCSkewTo类)、CCJumpBy、CCJumpTo(继承自CCJumpBy类)、CCBezierBy、CCBezierTo(继承自CCBezierBy类)、CCScaleTo、CCScaleBy(继承自CCScaleTo类)、CCBlink、CCFadeIn、CCFadeOut、CCFadeTo、CCTintTo、CCTintBy、CCDelayTime、CCReverseTime、CCAnimate,哇,CCActionInterval的子孙真是多吖!这下您就有很多种选择啦,随便选吧(随便选也是有讲究的,记住:我们最终是要用到图片的)。我就选择其中一个类给大家讲解一下吧。
  就拿CCAnimate类中的
+(id) actionWithDuration:(ccTime)duration animation:(CCAnimation*)animation restoreOriginalFrame:(BOOL)b;
来说吧,主要是用到了CCAnimation对象,怎么创建该对象呢?
  CCAnimation直接继承了NSObject类。该类中好多方法都使用到了帧(frame),看来帧是具有重量级作用的。动画就是播放很多帧实现的。我们就用
+(id) animationWithFrames:(NSArray*)frames delay:(float)delay;
方法吧,这个方法使用到了存储帧的数组。现在我们马上来创建这个数组,为了方便起见,我们使用NSArray的子类NSMutableArray来存放这些动画帧。现在,又出现问题了,动画帧怎么创建?!
  在cocos2d中,动画帧用CCSpriteFrame类来表示,翻译过来就是精灵帧。现在我们去看看这个类吧,记住,要看的是.h文件,因为.h文件中有很多有用的注释。我们就选择该类中的
+(id) frameWithTexture:(CCTexture2D*)texture rect:(CGRect)rect;
方法来创建该类的对象吧,该方法用到了CCTexture2D对象,“按图索骥”了这么久,朋友,您是不是没有耐心了呢?我相信您一定会坚持看下去。告诉您,有一种坚持,还真叫胜利!到这里,其实距离我们的目标(图片!)已经不远了。
  CCTexture2D是神马东东?(东东!不禁想起我的小名了,出来工作好久了,好久没有人喊我叫东东啦)咱们一起来看看吧,CCTexture2D文件的开头部分,我们可以看到
File: Texture2D.h 
Abstract: Creates OpenGL 2D textures from images or text.
这句话说得很明白吖。您还可以在该文件的
@interfaceCCTexture2D : NSObject
的上面找到
This class allows to easily create OpenGL 2D textures from images, text or raw data.
真好,成功近在咫尺!我们可以使用CCTexture2D中的
- (id) initWithImage:(UIImage *)uiImage;
方法来初始化该类的对象,这个方法用到了图片!(其实使用这个方法来创建CCTexture2D对象的效果并不是很多,更好的方法是使用TextureCache中的
-(CCTexture2D*) addImage:(NSString*) fileimage;
方法来创建CCTexture2D对象,例如:
CCTexture2D *texture = [[CCTextureCachesharedTextureCache] addImage:@"sprite_actions.png"];
(技巧:使用Project Find,在Find文本框中输入关键字CCTexture,在右边选择In Project and Frameworks,在查找出来的文件中寻找创建CCTexture2D对象的方法)到这里,我们终于使用图片完成了精灵动作的构建。
  在上面,我们提到了如何创建精灵的问题。现在我们就开始这项任务。在CCSprite类中,创建精灵的方法很多,在这些方法中,使用到的参数无非是CCTexture2D、CCSpriteFrame、NSString等对象,在上面已经讲解了这些对象的创建方法,您可以很容易地完成任务。朋友,我相信您可以的。
  文章中难免有错误之处,如若大家发现,请及时通知我进行更正。谢谢大家抽出宝贵的时间进行阅读。祝福每一位关注并使用cocos2d的朋友在cocos2d的世界里可以尽情地翱游。
【上篇】
【下篇】

抱歉!评论已关闭.