cocos2d游戏开发中的基本概念的理解
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菜单对象,通常属于当前场景的主层。