最近学cocos2d,看一般都用Zwoptex,但是这个软件要钱,所以用了一个在线版本的http://zwoptexapp.com/flashversion/基本功能也很好,需要注意的是,在最后导出png图片和plist文件时,一定要取相同的名字(切记啊切记),下面是素材
//=================================================================================
上代码:
@interface HelloWorldLayer :CCLayer
{
<wbr><wbr><span style="color:#608086">
CCSprite</span> *_sprite;</wbr></wbr>
<wbr><wbr><span style="color:#608086">
CCAction</span> *_walkAction;</wbr></wbr>
<wbr><wbr><span style="color:#608086">
CCAction</span> *_moveAction;</wbr></wbr>
<wbr></wbr>
}
@property(nonatomic,retain)CCSprite*sprite;
@property(nonatomic,retain)CCAction*walkAction;
@property(nonatomic,retain)CCAction*moveAction;
// returns a CCScene that contains the HelloWorldLayer as the onlychild
+(CCScene *) scene;
@end
#import "HelloWorldLayer.h"
// HelloWorldLayer implementation
@implementationHelloWorldLayer
@synthesizesprite=_sprite;
@synthesize moveAction =_moveAction;
@synthesize walkAction =_walkAction;
+(CCScene *) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScenenode];
<wbr></wbr>
// 'layer' is an autorelease object.
HelloWorldLayer*layer =[HelloWorldLayernode];
<wbr></wbr>
// add layer as a child to scene
[scene
addChild: layer];
<wbr></wbr>
// return the scene
return scene;
}
-(id)init{
<wbr><wbr><wbr></wbr></wbr></wbr>
<wbr><wbr><wbr>if((self=[super init])){</wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><span style="color:#42595e"><span style="color:#000000">[[</span><span style="color:#608086">CCSpriteFrameCache
</span>sharedSpriteFrameCache<span style="color:#000000">]</span>addSpriteFramesWithFile<span style="color:#000000">:</span></span></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>@"AnimHero.plist"];//第1步
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr> CCSpriteBatchNode*spriteSheet =[CCSpriteBatchNode<wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="color:#42595e">batchNodeWithFile</span>:<span style="color:#862621">@"AnimHero.png"</span>];</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr> [<span style="color:#772561">self
</span><span style="color:#42595e">addChild</span>:spriteSheet];//第2步</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><span style="color:#653fa5">NSMutableArray</span> *walkAnimFrames =[<span style="color:#653fa5">NSMutableArray</span><span style="color:#39237e">array</span>];</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><span style="color:#772561">for</span>(<span style="color:#772561">int</span>i=<span style="color:#2036fb">1</span>; i<=<span style="color:#2036fb">3</span>; i++)</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr> {</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr>[walkAnimFrames<span style="color:#39237e">addObject</span>:</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr> [[</wbr></wbr></wbr></wbr></wbr></wbr></wbr>CCSpriteFrameCacheshared SpriteFrameCache]spriteFrameByName:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr> [<span style="color:#653fa5">NSString</span><span style="color:#39237e">stringWithFormat</span>:<span style="color:#862621">@"hero%i.png"</span>,i]]];</wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr> } //第3步</wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><span style="color:#608086">CCAnimation</span>*walkAnim = [<span style="color:#608086">CCAnimation</span><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="color:#42595e">animationWithFrames</span>:walkAnimFrames<span style="color:#42595e">delay</span>:<span style="color:#2036fb">0.1f</span>];//第4步</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>_sprite=[CCSprite
spriteWithSpriteFrameNam<wbr>e<span style="color:#000000">:</span><span style="color:#862621">@"hero1.png"</span><span style="color:#000000">];</span></wbr>
<wbr><wbr><wbr><span style="color:#608086">_sprite</span>.<span style="color:#608086">position</span>=<span style="color:#6d4a30">ccp</span>(240,160);</wbr></wbr></wbr>
<wbr></wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>self.walkAction=[CCRepeatForever
actionWithAction:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>[<span style="color:#608086">CCAnimate
</span><span style="color:#42595e">actionWithAnimation</span>:walkAni<wbr><span style="color:#42595e">restoreOriginalFrame</span>:<span style="color:#772561">NO</span>]];</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr> [</wbr></wbr></wbr></wbr>_spriterunAction:_walkAction];<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr>[spriteSheet<span style="color:#42595e"> addChild</span>:<span style="color:#608086">_sprite</span>];<wbr>//第5步<wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr>}</wbr></wbr></wbr>
<wbr></wbr>
return self;
}
<wbr></wbr>
-(void) dealloc
{
<wbr><wbr><span style="color:#772561">self</span>.<span style="color:#608086">sprite</span>=<span style="color:#772561">nil</span>;</wbr></wbr>
<wbr><wbr></wbr></wbr>self.moveAction=nil;
<wbr><wbr></wbr></wbr>self.walkAction=nil;
<wbr><wbr>[</wbr></wbr>superdealloc];
}
@end
逐步解析:
第1步:缓冲sprite帧和纹理。<wbr><wbr><wbr></wbr></wbr></wbr>[[CCSpriteFrameCache<wbr></wbr>sharedSpriteFrameCache]<wbr></wbr>addSpriteFramesWithFile:
<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>@"AnimHero.plist"];
<wbr></wbr>
<wbr><wbr><wbr>首先,调用CCSpriteFrameCache的addSpriteFramesWithFile方法,然后把Zwoptex生成的plist文件当作参数传进去。这个方法做了以下几件事:1:寻找resource下和输入的参数名字一样但是后缀是.png的图片文件,然后把这个文件加入到共享的CCTextureCache中。就是AnimHero.png</wbr></wbr></wbr>
<wbr><wbr>2:解析plist文件,追踪所有的sprite在spritesheet中的位置,内部使用CCSpriteFrame对象追踪这些信息。</wbr></wbr>
第2步:创建一个精灵处理批节点。
CCSpriteBatchNode<wbr>*spriteSheet= [</wbr>CCSpriteBatchNode<wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#42595e; line-height:1.5">batchNodeWithFile</span>:<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#862621; line-height:1.5">@"AnimHero.png"</span>];</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>[<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#772561; line-height:1.5">self</span><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#42595e; line-height:1.5">addChild</span>:spriteSheet];</wbr></wbr></wbr></wbr></wbr></wbr>
接下来,创建CCSpriteBatchNode对象,把spritesheet当作参数传进去,spritesheet工作原理:1:创建一个CCSpriteBatchNode对象,通过传递一个包含所有sprite的spritesheet的名字作为参数,并加入到当前场景中。2:在spritesheet中创建的任何一个sprite,都应该当作CCSpriteBatchNode的一个孩子加进去,只要sprite包含在sprite中,就ok了。3:CCSpriteBatchNode可以智能遍历所有的孩子节点。
第3步:收集帧列表。
NSMutableArray<wbr>*walkAnimFrames =[<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#653fa5; line-height:1.5">NSMutableArray</span><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#39237e; line-height:1.5">array</span>];</wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#772561; line-height:1.5">for</span>(<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#772561; line-height:1.5">int</span><wbr>i=<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#2036fb; line-height:1.5">1</span>;i
<=<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#2036fb; line-height:1.5">3</span>;i++)</wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>{</wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr>[walkAnimFrames<wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#39237e; line-height:1.5">addObject</span>:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>[[</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>CCSpriteFrameCache<wbr></wbr>sharedSpriteFrameCache]<wbr></wbr>spriteFrameByName:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>[<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#653fa5; line-height:1.5">NSString</span><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#39237e; line-height:1.5">stringWithFormat</span>:<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#862621; line-height:1.5">@"hero%i.png"</span>,i]]];</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>}<wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr>为了创建一系列的动画帧,我们简单地遍历我们的图片名字(它们是按照hero1.png-->hero3.png的方式命名的),然后使用共享的CCSpriteFrameCache来获得每一个动画帧。记住,它们已经在缓存里了,因为我们前面调用了addSpriteFramesWithFile方法。</wbr></wbr>
第4步:创建对象动画
CCAnimation<wbr>*walkAnim = [<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#608086; line-height:1.5">CCAnimation</span><wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#42595e; line-height:1.5">animationWithFrames</span>:walkAnimFrames<wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#42595e; line-height:1.5">delay</span>:<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#2036fb; line-height:1.5">0.1f</span>]</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
接下来,我们通过传入sprite帧列表来创建一个CCAnimation对象,并且指定动画播放的速度。我们使用0.1来指定每个动画帧之间的时间间隔。
第5步:创建sprite并且让他run动画action
_sprite=[CCSprite<wbr></wbr>spriteWithSpriteFrameNam<wbr>e<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#000000; line-height:1.5">:</span><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#862621; line-height:1.5">@"hero1.png"</span><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#000000; line-height:1.5">];</span></wbr>
<wbr><wbr><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#608086; line-height:1.5">_sprite</span>.<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#608086; line-height:1.5">position</span>=<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#6d4a30; line-height:1.5">ccp</span>(240,160);</wbr></wbr></wbr>
<wbr></wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr>self.walkAction<wbr>=[</wbr>CCRepeatForever<wbr></wbr>actionWithAction:
<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>[<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#608086; line-height:1.5">CCAnimate</span><wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#42595e; line-height:1.5">actionWithAnimation</span>:walkAni<wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#42595e; line-height:1.5">restoreOriginalFrame</span>:<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#772561; line-height:1.5">NO</span>]];</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr><wbr><wbr>[</wbr></wbr></wbr></wbr></wbr>_sprite<wbr></wbr>runAction:_walkAction];<wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr>
<wbr><wbr><wbr>[spriteSheet<wbr><span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#42595e; line-height:1.5">addChild</span>:<span style="font-family:宋体,Verdana,Arial,Helvetica,sans-serif; color:#608086; line-height:1.5">_sprite</span>];</wbr></wbr></wbr></wbr>
我们首先通过spriteframe来创建一个sprite,并把它放在屏幕中间。然后,生成CCAnimationAction,并赋值给场景的walkAction属性,最后让熊来运行这个action。
最后,我们把hero加个场景中--把它当作spritesheet的孩子加到spritesheet中去。注意,如果在这里我们没有把它加到spritsheet中,而是加到当前层里面的话。那么我们将得不到spritesheet为我们带来的性能提升!!
分享到:
相关推荐
Cocos2D-Objective-C是Cocos2D游戏引擎的一个版本,专为iOS应用设计,它允许开发者使用Objective-C语言创建2D游戏、图形界面或者其他动态视觉效果。 【描述】提到的"github地址:...
Cocos2d-x是一款流行的开源游戏开发框架,广泛用于创建2D游戏、应用程序和互动内容。在Cocos2d-x中,"cocos plist资源图片文件等"涉及到的关键概念是plist文件和纹理(texture)的使用,它们是游戏资源管理的重要...
本教程涵盖从基础到进阶的cocos2d游戏开发全过程,共13章节,旨在帮助开发者快速掌握这一强大的游戏引擎。 第一章:入门介绍 本章首先会介绍cocos2d的历史、特性以及它在游戏开发中的应用。然后,会引导初学者安装...
cocos2d-x是一个跨平台的2D游戏开发框架,广泛应用于移动设备,如iOS和Android。lua是一种轻量级的、面向过程的编程语言,因其简洁和高效而被许多游戏开发者用作脚本语言,特别是在游戏逻辑和界面交互中。 在cocos...
Cocos2d是一个流行的开源游戏开发框架,它使得创建2D游戏、演示和其他图形交互式应用程序变得简单易行。 【描述】描述中的“Caged-cocos2d-game-b00c442.zip”暗示了这是一个名为"Caged"的游戏项目,可能是一个早期...
Cocos2D是一款开源的游戏开发框架,广泛用于2D游戏、演示和其他图形交互应用的开发。它提供了丰富的功能,如场景管理、动作和动画系统、物理引擎支持以及精灵、文本、图层等图形元素的处理,使得开发者可以快速构建...
Cocos2D是一款广泛用于开发2D游戏、演示和其他图形交互式应用程序的开源框架。该版本为9bef845,可能代表源代码在Git仓库中的一个特定提交哈希值,用于追踪源代码的历史版本。 【描述】"IOS应用源码——saim80-...
1. **Cocos2D框架**:Cocos2D是一个流行的2D游戏开发框架,支持跨平台开发,提供丰富的图形渲染、动画、物理引擎等功能。 2. **iOS应用生命周期**:理解`AppDelegate`类中的方法,如`application:...
综上所述,通过《Climbers》这款2D游戏,我们可以学习到Cocos2D引擎的基本使用、游戏逻辑设计、用户输入处理、物理模拟、音频管理和iOS应用发布的整个流程。这些都是iOS游戏开发中不可或缺的知识点,对于初学者来说...
Cocos2D-iPhone是一个广泛使用的开源游戏引擎,特别适合于开发2D游戏,它提供了丰富的功能和易用性,使得开发者能够快速构建游戏应用。 在iOS平台上开发游戏,首先你需要熟悉Objective-C或Swift编程语言,因为Cocos...
在iOS平台上,Cocos2d-x是一个广泛使用的2D游戏开发框架,它允许开发者使用C++、Lua或者JavaScript进行编程。然而,为了提供更丰富的用户体验,游戏可能需要与设备的系统功能进行交互,比如访问用户的相册。在iOS中...
在游戏开发领域,资源管理是至关重要的,尤其是在移动端游戏如使用Cocos2d-x框架时。Cocos2d-x是一个跨平台的2D游戏引擎,支持多种操作系统,包括iOS、Android以及Windows等。为了保护游戏资源不被轻易篡改或盗用,...
它是一个2D游戏开发框架,提供了丰富的图形绘制、动画处理、物理模拟等功能,简化了游戏开发过程。Cocos2D-iPhone支持Objective-C,使得与Apple的SDK集成更为紧密。 2. **Objective-C编程语言**: 这个项目的代码...
Cocos2d-x是一个跨平台的2D游戏开发框架,支持多种操作系统,如iOS、Android和Windows。它提供了丰富的API和工具,使得开发者能够用C++或Lua编写游戏逻辑,使用精灵、层、场景等基本游戏元素构建游戏世界。 在提供...
cocos2d-x是一款强大的跨平台2D游戏开发框架,它基于C++,同时提供了Lua和JavaScript的绑定,使得开发者可以在这三种语言中自由选择进行游戏逻辑的编写。在iOS平台上,cocos2d-x以其高效、灵活和丰富的功能库,成为...
Cocos2D-iPhone是一个广泛使用的2D游戏开发框架,专为iOS平台设计。这个“知易Cocos2D-iPhone开发教程源代码”提供了一套详细的教程,旨在帮助移动开发新手快速入门游戏开发。通过学习这些源代码,开发者可以深入...
Cocos2d是一款广泛应用于创建2D游戏、演示和其他图形交互式应用程序的开源框架。该框架以其易用性、高效性能和丰富的功能集而闻名,是iOS开发者常用的游戏开发工具。 【描述】中提到的"IOS应用源码之【游戏】ABC123...
Cocos2d是一个广泛使用的2D游戏开发框架,它为开发者提供了创建高质量游戏所需的工具和库。 首先,我们要理解Cocos2d。Cocos2d是基于Objective-C的,它支持多种平台,包括iOS。Cocos2d包含了一系列的类,如CCScene...
Cocos2d-x是一款强大的开源游戏开发框架,主要用于2D游戏、实时渲染应用程序以及互动式技术演示的开发。它基于C++,同时提供了Lua和JavaScript的绑定,让开发者可以选择自己熟悉的语言进行游戏逻辑的编写。Cocos2d-x...
【标题】:“IOS应用源码之【游戏】-BouncingBall1_cocos2d_源码_游戏.zip”指的是一个包含iOS游戏应用源代码的压缩文件,名为"BouncingBall1",该源码是基于Cocos2d游戏开发框架实现的。 【描述】:“IOS应用源码...