首页 > ios > ios5_cocos2d随记1

ios5_cocos2d随记1

CCDirector导演类的实现。

  个人意译为“艺术总监”。哈哈。关于针对 Director 的调用代码(下面这段程序是主程序启动时的标准步骤,在是 App代理对象的系统启动函数 applicationDidFinishLaunching 中实现):

// before creating any layer, set the landscape mode
//1. 设定 Director 对象与当前窗口的关系,便于Director 操作主窗口。
[[Director sharedDirector] setDeviceOrientation: CCDeviceOrientationLandscapeRight];

// attach the OpenGL view to a window
//2. 设置主窗口方向。(垂直还是水平)
[[Director sharedDirector] attachInView:window];

// show FPS
//3. 是否显示 FPS。(每秒显示的帧数)
[[Director sharedDirector] setDisplayFPS:YES];

// frames per second
//4. 设定游戏劢画每秒显示桢数。(默认是 60 帧)
[[Director sharedDirector] setAnimationInterval:1.0/60];

// Default texture format for PNG/BMP/TIFF/JPEG/GIF images 
// It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
// You can change anytime.
//5. 设定主窗口显示图像的调色盘位宽。
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];

  显然,我们看到可以通过 Director 对象完成以下两大类个任务:
  1.设置主程序窗口的显示属性。
  2.管理、显示场景。

  Director 对象一次只能显示一个场景。为了便于管理场景对象,Derictor 对象有以下 3 个属性与场景有关(参见 director.h):
  1. 当前正在显示的场景。Scene *runningScene_;
  2. 下一个将要显示的场景。Scene *nextScene;
  3. 代执行场景队列。NSMutableArray *scenesStack_;(实际应用时,要确保代执行队列不要太长)。

  同时,Director 对象管理场景的方法主要有以下几个:
  1. 主程序启动,显示第一个场景的方法:(void) runWithScene:(Scene*) scene;
  2. 挂起当前当前正在运行的场景并压栈到代执行场景队列。将传入场景设置为当前执行场景:(void)pushScene:(Scene*) scene;
  3. 执行代执行场景队列中的最后一个场景,当前场景被释放:(void) popScene;当代执行队列中没有代执行场景时,系统自动退出,调用 end 方法。
  4. 直接用一个场景取代当前执行场景,释放当前场景:(void) replaceScene:(Scene*) scene;返个函数是经常使用的。
  5. 结束场景运行:(void) end;
  6. 暂停场景运行:(void) pause;画面还存在,时间任务停止。
  7. 恢复场景运行:-(void) resume;

CCScene(场景类)

  有种拍电影的感觉,这是一个类就是一个场景,场景类一般作为层的容器。

CCLayer(层类)

  Layer的主要功能在于:
  1)接收 iPhone 上的屏幕触摸(touch)操作输入。
  2) 接收动力感知(Accelerometer)输入。
  Cocos2D 直接提供了以下 3 个层:ColorLayer颜色层、Menu菜单层、MultiplexLayer复合层。
菜单层详解:
  MenuItem 类实例组成各式各样按钮的菜单管理选择画面局。Menu 类提供 的方法主要都是用来按照横向、竖向戒者多行列排序展示 MenuItem 类实例的。
  为了实现不同的按钮效果,系统提供多种类型 MenuItem。每个挄钮都有三个基本状 态:正常、选中、禁止。下面,
  我们逐一介绍一下 MenueItem 类系:
   MenuItemMenuItem 是基础类,不能直接使用该类。作为所有菜单项的父类,MenuItem 主要完成以下两个任务:1. 设置按钮的状态2. 负责回调处理函数。(但按钮被选中单击后,需要调用的凼数叫回调函数)具体说就是内置一个 NSInvocation *invocation 来统一实现回调函数的激活。
   MenuItemLabelMenuItemLabel 内置 Label 对象,将一个基本的 Label 转变成为一个菜单项, 增加选中时的文字放大效果。
   MenuItemAtlasFontMenuItemAtlasFont 从 MenuItemLabel 继承,将一个 LabelAtlas 转变为一 个菜单项。 增加选中时的文字放大效果。这里用了一个技巧:就是把一个 LabelAtlas 传给了父类的 Label 指针。
   MenuItemFontMenuItemFont: 从 menuItemLabel 继承,创建直接设置字体的菜单项。 (内部实现时依然用到 Label 对象)(以上三种字体型菜单项都是通过 Lable 类及其派生类完成视觉展示,借用父类 MenuItem 实现菜单项的函数回调。)
   MenuItemSpriteMenuItemSprite 内置 3 个 CocosNode对象,表示正常、禁 止、选中三个状态的图像。选中时没有特别视频效果。
   MenueItemAtlasSpriteMenueItemAtlasSprite 从 MenuItemSprite 派生,提供针对 3 个对象的操作。
   MenuItemImageMenuItemImage 从 MenuItemSprite 派生,不支持禁止状态的设置。
   MenuItemToggleMenuItemToggle:支持内部一个 MenuItem 数组负责展示不同的状态,进而显示出来实现状态切换。
(以上 4 中菜单项直接通过 CocosNode 对象来实现图形按钮的展示)

CCSprite(精灵类)

  以为在程序中95%以上的都是精灵实现模拟。提高精灵类的实现效率,是一个十分关键的问题。
  1)缓存图像内容,减少相同内容文件的读取次数。
  通过系统的类 CCTextureCache,Cocos2D-iPhone 库按照文件名为主键索引全部运行时读取的图像文件。当文件名一样时,直接迒回内存图片而不再读取文件。
  所有与图像文件有关的实现在底层统一透明调用 CCTextureCache 类的单例对象,保证最少的系统 IO 操作,提高程序运行效率。
  2)批量提交绘画,减少 OpenGL 函数调用次数。
  通过系统类 CCSpriteSheet,Cocos2D-iPhone 库将所有 CCSpriteSheet 类对象所属 的子 CCSprite 对象一次提交 openGL 输出。
  还有一个叫 CCSpriteFrameCache 类。该类用于管理动画效果的全部帧图像,该类直接提供针对一个简单的图像处理工具 http://zwoptex.zwopple.com/输出文件支持。该类的实现也调用CCTextureCache。

  1. Carmen 9月 3rd, 2012 @ 03:07 | #1

    Shoot, who would have tohught that it was that easy?

评论提交中, 请稍候...

留言


可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks