1.什么是游戏?
答: 游戏就是玩家操作一个或多个人工控制的精灵与一个或者若干个系统控制的精灵进行互动: 近身搏斗,远程射击,贴近对话等等.
2.游戏开发的组成元素?
答:导演、场景、层、精灵 . 这4个元素的复杂程度决定了游戏的复杂程度.
3.导演的作用(Cocos2d-iphone)?
答: 导演是按照工作流程,控制场景之间切换的.控制场景有一系列操作场景的方法,例如: 终止,压栈,激活当前场景,引导下一个场景.
特别说明: 同一时间,只有一个Scene(场景)处于激活状态;可以说Scene 是Layer的一个容器.
4. Scene的作用 :
作为某个场景的总容器对象,包括所有的内容对象(菜单,状态,游戏角色,NPC) 都属于该对象.层叠关系通过CocosNode的addChild的Z参数决定.
实现场景切换的特殊效果.因为所有的场景切换特效都是从Scene的子类TransitionScene派生的.
5. CCLayer的主要功能是什么?
接收的屏幕触摸(touch)操作输入.
接收动力感应(Accelerometer)输入
6. Sprite的主要功能是什么?
展示静态图片(例如背景图)
使用AtlasSprite,展示游戏角色和NPC角色
7.精灵的本质是什么?
答: 精灵就是一张不断变化的图片.
8. 为了方便开发,Cocos2d提供了一些直接可用层,分别有什么?
答:
颜色层 - ColorLayer: 这是一个透明的丶可以按照RGB设置填充颜色的层.可以通过setContentSize设置层大小,改变颜色块的尺寸. 也支持动作,可以闪烁丶渐变.
菜单层 – Menu : 这是一个以Menu对象为集合类,MenuItem类实例组成各种各样按钮的菜单管理选择画面层.注意: 该层中的实例必须是MenuItem类或者子类的实例. Menu类是控制MenuItem类实例的横向,竖向或者多行列排序展示MenuItem类实例的.
复合层 -MultiplexLayer
9. MenuItem是否可以直接使用,他的主要任务是什么?
答: MenuItem是基类,不要直接使用.作为所有菜单项的父类,MenuItem主要完成以下两个任务:
设置按钮的状态
负责回调处理函数.
10. 场景(Scene)间是如何转换的?
答:
(1) 首先,new一个场景容器
(2) 把要变的层,加到新开辟的scene里面
(3) 用导演换层
11. Iphone平台提供了几种会图库? 分别是?
答: 两种. 分别是quartz 2D 和 OpenGL ES
Quartz 2d 是 Core Graphics 绘图库的子集.
OpenGL ES 是跨平台绘图库OpenGL的子集.(Cocos2d-iphone是用的这个)
他们有什么不同吗? 他们的坐标系原点就不同.
12. 什么是锚点(anchorPoint)?
答: anchorPoint是定义在精灵,层等中的一个点,放置精灵、层等到坐标系中是以此点为参考点的.
13. *.fnt是什么格式,什么时候用到?
答: .fnt是字体文件集.可以加载到系统,生成相应的字体. 如:
CCLabelBMFont *showFont = [CCLabelBMFontlabelWithString:@”hello world” fntFile:@”font09.fnt”];
14. CCTextureCache 和CCSpriteBatchNode 和 CCSpriteFrameCache类的作用分别是什么?
答:
CCTextureCache
通过系统的类CCTextureCache,Cocos2d-iphone库,按照文件名为主键索引全部运行时读取的图像文件.当文件名一样时,直接返回内存图片而不再读取文件.
所有与图像文件有关的实现在底层统一透明调用CCTextureCache类的单例对象,保证最少的系统IO操作,提高程序运行效率.
CCSpriteBatchNode
通过系统类CCSpriteSheet,Cocos2d-iphone库将所有CCSpriteBatchNode类对象所属的子CCSprite对象一次提交OpenGL输出.
CCSpriteFrameCache
管理动画效果的全部帧数,该类直接提供针对一个简单的图像处理工具输出文件支持.该类的实现也调用了CCTextureCache.
15. 如何设置一组动画,并且运行呢?
答:用CCAnimation,例如:
CCSpriteBatchNode *mgr = [CCSpriteBatchNodebatchNodeWithFile:@”fight.png” capacity:5];
CCAnimation *ans = [CCAnimationanimationWithArray:nil delay:0.2f];
[ansaddFrameWithTexture:mgr.texture rect:CGRectMake(0,31,30)];
[ansaddFrameWithTexture:mgr.texture rect:CGRectMake(5,30)];
[ansaddFrameWithTexture:mgr.texture rect:CGRectMake(10,30)];
这样ans对象就保存了一组动画帧.
如何根据动画创建动作的?
fight = [CCSpritespriteWithTexture:mgr.texture rect:CGRectMake(0,30)];
id action = [CCAnimateactionWithAnimation:ans];
[fight runAction:[CCRepeatForeveractionWithAction:action];
16. Map Editor工具的作用是什么?(Tiled地图编辑器,下载地址http://mapeditor.org/)
答: Map Editor是绘制场景地图的.生成的地图是*.tmx格式的(本质是XML文件).
注意:生成的地图,要与地图组成元素的*.png图片放在一起.
17. Cocos2d-iphone实现地图显示的2个主要组件文件是什么?
答: & 负责整体地图的显示: CCTMXTiledMap.h CCTMXTiledMap.m
& 负责xml文件读取和解析:CCTMXXMLParser.h CCTMXXMLParser.m
18. CCTMXLayer的作用是什么?
答:CCTMXLayer是CCSpriteBatchNode的子类,我们知道CCSpriteBatchNode是把所有的图像缓存起来,CCTMXLayer的作用就是把地图的图像缓存起来,这样我们就能以”瓦片”单位取得地图上不同的”瓦片”.
19. 30帧/秒是什么意思?
答: 图像引擎以每秒30次的频率不断将内存数据所描绘的虚拟世界画到IPHONE屏幕上.
20. 由3类独立的程序逻辑组成了游戏程序的主要编程模型,是哪3类?
答:
(1) 用户输入: “触摸”或重力感应时玩家精灵下达各种指令
(2) AI引擎指令: 由系统对非玩家精灵下达的各种指令
(3) 各类定时逻辑: 前两类指定直接修改游戏精灵状态.
各类定时逻辑根据各种精灵的相互位置信息判断可能触发的精灵或环境变化.