cocos2d游戏开发中的基本概念的理解



2012-01-20 16:57 
张智清 
阅读(2400
评论(0
编辑 
收藏 
举报

基本概念:
场景Scenes:是一个特殊的节点,它是所有节点的基础。场景的目的在于呈现出游戏的可操作部分和展现游戏场景(如:游戏结束、主页面和高分排行榜等)。
图层Layer:它呈现出的是玩游戏的具体区域。与Photoshop的图层作用类似。这意味着某个场景可以由多个图层构成。一个图层承载背景画面,另一个图层可呈现游戏动作发生之初。
精灵Sprites:指的是那些真正赋予游戏灵魂的事物,即游戏的角色。比如,若制作太空游戏,则你的飞船和敌人就是各个游戏精灵。用于深化用户游戏体验的每个角色都可以当成是精灵。

基本概念:
场景Scenes:是一个特殊的节点,它是所有节点的基础。场景的目的在于呈现出游戏的可操作部分和展现游戏场景(如:游戏结束、主页面和高分排行榜等)。每个场景都是通过不同的层(Layer)的叠加和组合协作来实现不同的功能的。通常每个场景都是有一个或几个层组成的。

图层Layer:这是写游戏的重点,它呈现出的是玩游戏的具体区域。与Photoshop的图层作用类似,都是透明或半透明的层进行叠加。这意味着某个场景可以由多个图层构成。一个图层承载背景画面,另一个图层可呈现游戏动作发生之初。编写cocos2d程序时,大部分工作就是编写CCLayer的子类去实现所要的效果。CCLayer负责处理事件event。Events会从第一个向最后一个layers传递,直至某个layer获取event并处理它。

精灵Sprites:指的是那些真正赋予游戏灵魂的事物,即游戏的角色。比如,若制作太空游戏,则你的飞船和敌人就是各个游戏精灵。用于深化用户游戏体验的每个角色都可以当成是精灵。从技术上讲,精灵就是一个可以不断变化的图片。这些变化包括:位置移动、旋转(以自身几何中心或以某个屏幕坐标为轴)、放大缩小、运动(按一定时间间隔连续显示一系列图像,形成运动效果)。因此构成了以下一些基本操作。

关于精灵的基本操作
1. 初始化

CCSprite *sprite = [CCSprite spriteWithFile:@"bg.png"];

// 创建无图的精灵
CCSprite *sprite2 = [CCSprite node];

2. 设置精灵贴图大小

sprite2.textureRect = CGRectMake(0,0,20,20);

3. 添加到图层中

// 将精灵加入到层中,并设置其z轴层次为2
[self addChild:sprite z:2];

4. 对精灵进行缩放

// 整体缩放
sprite.scale = 2;

// 对精灵宽或高缩放
sprite.scaleX = 2;
sprite.scaleY = 2;

5. 旋转精灵

sprite.rotation = 90;

6. 设置精灵透明度

// 设置精灵为完全不透明,值范围0~255
sprite.opacity = 255;

7. 定位精灵

// 设置精灵中心点坐标即可
sprite.position = ccp(100,100);

8. 镜像反转精灵

[sprite setFlipX:YES]; //X轴镜像反转
[sprite setFlipY:YES]; //Y轴镜像反转

9. 设置精灵颜色

[sprite setColor:ccc3(255,0,0)];

10. 得到图的宽高

float contentSize = sprite.contentSize.width;

// 按照像素设定图片大小
sprite.scaleX = (20)/contentSize;

11. 在原有的基础上加xy坐标

sprite.position = ccpAdd(sprite.position, ccp(20,20));

12. 设置图片锚点

[sprite  setAnchorPoint:ccp(0.5,0.5)];

13. 重新排列z轴顺序

[self  reorderChild:sprite z:1];

14. 更换精灵贴图

CCTexture2D  *test = [[CCTextureCache sharedTextureCache] addImage:@"test.png"];
[sprite setTexture:test];

15. 更换精灵贴图,加载帧缓存

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"test.plist"]; //这个test.plist保存了fram.png这张图
CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"fram.png"];
[sprite2 setDisplayFrame:frame];

16. 设置可视区域

CCSprite *sprite3 = [CCSprite spriteWithFile:@"icon.png" rect:CGRectMake(0,0,20,20)]; //创建时设置
[sprite3 setTextureRect:CGRectMake(10,10,30,30)]; //创建后设置

导演Director
      按照面向对象的设计原则和反向依赖原则:精灵不应该依赖层、层不应该依赖场景、场景不应该依赖整个流程。因此导演对象才是整个流程的代表,它负责游戏全过程的场景切换。
      导演通常只有一个,因此这个对象是单例(singleton)。Cocos2d框架已经预定义了该实例,不需创建,直接使用即可。 导演对象接受层对象/场景的要求,按照预先设计好的流程来终止、压栈、激活当前场景,引导下一个场景。

备注:任何时间,只有一个Scene对象实例处于运行激活状态。该对象可以作为当前游戏内容的对象的整体包容对象,对于Menu菜单对象,通常属于当前场景的主层。

版权声明:本文为lovecode原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lovecode/articles/2328018.html