这是我根据知易的<知易Cocco2D-iPhone开发教程>做的一些问题汇总吧,希望对大家有帮助.

1. 说下iphone游戏的启动流程

答:

(1)     主程序入口 – main.m

Int main(int argc, char *argv[]) {

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

UIApplicationMain(argc, argv, nil, @”T01AppDelegate”);

[pool drain];

return 0;

}

(2)     讲程序的控制权传递给了应用程序代理对象 – 代码中是: T01AppDelegate

类T01AppDelegate 对象通过实现iphone OS 系统定义的应用程序接口UIApplicationDelegate 来处理当前应用程序需要处理的各种系统事件:

l  放弃控制权: applicationWillResignActive

l  获得控制权:applicationDidBecomeActive

l  内存报警:applicationDidReceiveMemoryWarning

l  程序退出提示:applicationWillTerminate

l  系统时间变化:applicationSignificantTimeChange

当完成初始化之后,通过函数applicationDidFinishLaunching将程序的控制权传递给Cocos2d-iphone的类库.

(3)     当Cocos2d-iphone 接收到程序的控制权之后,开始准备启动游戏主画面的准备:

3.1 获得主窗口对象(句柄) 由window保存.

3.2 将Cocos2d-iphone的”导演”与之绑定

3.3 设置”导演”对象的基本属性

3.4 导演创造场景

3.5 将对象层加入到当前场景

3.6 由导演对象启动并运行场景

2.如何安装cocos2d-iphone引擎到xcode中?

答: 启动终端,然后定位到cocos2d-iphone所在的目录,然后打命令…

./install-templates.sh

但是,如果安装不成功,就需要你有更高的权限,命令如下

----------------------------

sudo –s       回车

password:     然后输入密码回车

----------------------------

就能切换到 bash-3.2# 用户了.

3. Xcode4 如何设置set Active Target?

答: 点击product -> Edit Schema.. 弹出的页面 最下面有一个 Manage Schemes…  双击你要运行的**.xcodeproj文件,即可.

4. 几乎所有游戏开发中的组成元素?

答: 场景 层 精灵 导演 .

这4个元素的复杂程度决定了游戏的复杂程度.

5. 层(Layer)是如何处理事件的?

答: 我个人称为 : 下沉处理.  即 从最上层开始接收事件,如果不处理,事件下沉到下面的层以此类推,直到有一层处理了事件为止事件就不在下沉.

6. 为了方便,Cocos2d-iphone从技术实现角度提供了一些公用层,例如,处理菜单用的菜单曾(Menu) ,处理颜色显示的颜色层(ColorLayer)等.

7. 精灵的本质是什么?

答: 精灵就是一张不断变化的图片.

8. 什么是游戏?

答: 游戏就是 玩家操作一个或多个人工控制的精灵与一个或者若干个系统控制的精灵进行互动: 近身搏斗, 远程射击, 贴近对话等等.

9. 导演的作用(Cocos2d-iphone)?

答: 导演是按照工作流程,控制场景之间切换的.

既然控制场景的,就有一系列操作场景的方法, 例如: 终止, 压栈, 激活当前场景, 引导下一个场景.

特别说明: 同一时间,只有一个Scene(场景)处于激活状态;

可以说Scene 是Layer的一个容器.

10. 问:Director对象是操作场景的,那它有哪些属性和方法与场景有关呢?

答:

属性:

(1) Scene *runningScene_;

(2) Scene *nextScene;

(3) NSMutableArray *sceneStack_;

方法:

(1)     (void) runWithScene: (Scene *) scene; 主程序启动,显示第一个场景的方法.

(2)     (void) pushScene: (Scene *) scene; 挂起当前场景,并且压栈到队列中. 将传入场景设置为当前执行场景.

(3)     (void) popScene; 执行队列中的最后一个场景,当前场景被释放.若队列中没有场景,系统自动退出,调用end方法.

(4)     (void) replaceScene: (Scene *) scene; 直接用一个场景取代当前场景,当前场景被释放.

(5)     (void) end; 结束场景运行;

11. CCLayer的主要功能是什么?

(1)     接收Iphone上的屏幕触摸(touch)操作输入.

(2)     接收动力感应(Accelerometer)输入

12. 为了方便开发,Cocos2d-iphone提供了一些直接可用层,分别有什么?

答: 3个.

颜色层 - ColorLayer : 这是一个透明的丶可以按照RGB设置填充颜色的层.可以通过setContentSize设置层大小,改变颜色块的尺寸. 也支持动作,可以闪烁丶渐变.

           菜单层Menu : 这是一个以Menu对象为集合类,MenuItem类实例组成各种各样按钮的菜单管理选择画面层.

注意: 该层中的实例必须是MenuItem类或者子类的实例.

Menu类是控制MenuItem类实例的横向,竖向或者多行列排序展示MenuItem类实例的.

           复合层 - MultiplexLayer

13. MenuItem是否可以直接使用,他的主要任务是什么?

答: MenuItem是基类,不要直接使用.作为所有菜单项的父类,MenuItem主要完成以下两个任务:

(1)     设置按钮的状态

(2)     负责回调处理函数.

14. 我在看MenuItem的子类和实现的文件中,发现一种常用的写法. 就是把父类的定义子类的定义写在一个文件里,然后分别在不同的文件,实现不同的子类.例如:

#import <Foundation/Foundation.h>

/// 父类 ///

@interface Person

@end

/// 子类1

@interface Boy

@end

/// 子类2

@interface Gril

@end

----------------------------------

实现Boy类

#import “Person.h”

@implementation Boy

@end

实现Girl类

#import “Person.h”

@implementation Gril

@end

15. 分别说明Scene, layer, sprite的作用?

答:

Scene :

(1) 作为某个场景的总容器对象,包括所有的内容对象(菜单, 状态, 游戏角色, NPC) 都属于该对象.层叠关系通过CocosNode的addChild的Z参数决定.

(2) 实现场景切换的特殊效果.因为所有的场景切换特效都是从Scene的子类TransitionScene派生的.  (记住 Cocos2d-iphone中,都要在类前面加上CCScene)

Layer – 为了处理输入问题

(1)     Touch事件处理

(2)     动力感应处理

Sprite

(1)     展示静态图片(例如背景图)

(2)     使用AtlasSprite,展示游戏角色和NPC角色

16. 场景(Scene)间是如何转换的?

答:

(1)     首先,new一个场景容器

(2)     把要变的层,加到新开辟的scene里面

(3)     用导演换层

例如:

-(void)nextGame(id) sender

{

Scene *sc = [Scene node];

[sc addChild:[NextGameLayer node]];

[[Director sharedDirector] replaceScene:sc];

}

若,切换层的时候,需要特效,比如,渐变,幻灯片等,则可用到CCTransition及其子类,例如:

[Director sharedDirector] replaceScene:[CCTransitionSlideInR transitionWithDuration:1.2f scene:sc]];

17. Iphone平台提供了几种会图库? 分别是?

答: 两种. 分别是quartz 2D 和 OpenGL ES

Quartz 2d 是 Core Graphics 绘图库的子集.

OpenGL ES 是跨平台绘图库OpenGL的子集.(Cocos2d-iphone是用的这个)

他们有什么不同吗? 他们的坐标系原点就不同.

18. 什么是锚点(anchorPoint)?

答: anchorPoint是定义在精灵,层等中的一个点,放置精灵层等到坐标系中是一此点位参考点的.

19. *.fnt是什么格式,什么时候用到?

答: .fnt是字体文件集.可以加载到系统,生成相应的字体. 如:

CCLabelBMFont *showFont = [CCLabelBMFont labelWithString:@”hello world” fntFile:@”font09.fnt”];

20. CCTextureCache 和 CCSpriteBatchNode 和 CCSpriteFrameCache类的作用分别是什么?

答:

           CCTextureCache

通过系统的类CCTextureCache,Cocos2d-iphone库,按照文件名为主键索引全部运行时读取的图像文件.当文件名一样时,直接返回内存图片而不再读取文件.

所有与图像文件有关的实现在底层统一透明调用CCTextureCache类的单例对象,保证最少的系统IO操作,提高程序运行效率.

           CCSpriteBatchNode

           通过批量提交绘画,减少OpenGL函数调用次数.

通过系统类CCSpriteSheet,Cocos2d-iphone库将所有CCSpriteBatchNode类对象所属的子CCSprite对象一次提交OpenGL输出.

           CCSpriteFrameCache

           管理动画效果的全部帧数,该类直接提供针对一个简单的图像处理工具http://zwoptex.zwople.com/输出文件支持.该类的实现也调用了CCTextureCache.

21. Cocos2d-iphone中循环调用回调函数的方法是什么?

答:[self schedule:@selector(step:)  interval:1];

22. 如何设置一组动画,并且运行呢?

答:用CCAnimation,例如:

CCSpriteBatchNode *mgr = [CCSpriteBatchNode batchNodeWithFile:@”fight.png” capacity:5];

CCAnimation *ans = [CCAnimation animationWithArray:nil  delay:0.2f];

[ans addFrameWithTexture:mgr.texture   rect:CGRectMake(0, 0, 31, 30)];

[ans addFrameWithTexture:mgr.texture   rect:CGRectMake(5, 0, 31, 30)];

[ans addFrameWithTexture:mgr.texture   rect:CGRectMake(10, 0, 31, 30)];

这样ans对象就保存了一组动画帧.

如何根据动画创建动作的?

fight = [CCSprite spriteWithTexture:mgr.texture   rect:CGRectMake(0, 0, 31, 30)];

id action = [CCAnimate actionWithAnimation:ans];

[fight runAction:[CCRepeatForever actionWithAction:action];

23. CCLayer遵守了什么协议,以方便用户的触摸动作? 协议定义的方法是什么?

答: CCLayer遵守的与触摸相关的协议是<CCStandardTouchDelegate>

 

@protocol  CCStandardTouchDelegate <NSObject>

@optional

(void) ccTouchesBegan: (NSSet *) touches withEvent:(UIEvent *) event;

(void) ccTouchesMoved: (NSSet *) touches   withEvent: (UIEvent *) event;

(void) ccTouchesEnded: (NSSet *) touches withEvent: (UIEvent *) event;

(void) ccTouchesCancelled: (NSSet *) touches withEvent: (UIEvent *) event;

@end

 

24. 实现了 <CCStandardTouchDelegate>协议的ccTouchXX方法,为什么在运行程序是不进入方法呢?

答: 要想启动触发事件,首先你需要在layer的初始化方法里,加入以下代码:

self.isTouchEnabled = YES; // 默认是NO

25. 双点触控,如何判断是手势的合同,还是分开?

答:

(1)     判断是否是双点触控

(2)     计算两点间的距离

(3)     在移动的方法里,判断两点间的距离,与之前俩点间的距离比较.

示例代码如下:

-(void) ccTouchesBegan:(NSSet *) touches  withEvent:(UIEvent *) event {

NSSet *allTouches = [event allTouches];

float distances;

float afterMovedDistances;

swith([allTouches count]) {

case 1: //单点

break;

case 2 : // 两点

UITouch *touchStartPoint = [[allTouches allObjects] objectAtIndex:0];

UITouch *touchToPoint = [[allTouches allObjects] objectAtIndex:1];

distance = [self distanceBetweenTwoPoints:(UITouch *) start  toPoint:(UITouch *) to];

break;

default:

break;

}

}

-(float) distanceBetweenTwoPoints:(UITouch *) start   toPoint: (UITouch *) to {

CGPoint startLocation = [start locationInView:[start view]] ;

CGPoint toLocation = [[to locationInView:[to view]];

float x = startLocation.x – toLocation.x;

float y = startLocation.y – toLocation.y;

return sqrt(x * x + y * y);  // 求 直角三角形斜线长

}

-(void) ccTouchesMoved: (NSSet *) touches   withEvent: (UIEvent *) event {

NSSet *allTouches = [event allTouches];

swich([allTouches count]) {

case 1 : break;

case 2:

UITouch *startTouch = [[allTouches allObjects] objectAtIndex : 0];

UITouch *toTouch = [[allTouches allObjects] objectAtIndex:1];

afterMovedDistances = [self distanceBetweenTwoPoints:startTouch  toPoint:  toTouch];

if( distances > afterMovedDistances ) {

// 合拢手势

} else if (distances < afterMovedDistances) {

// 分开手势

}

break;

default:

break;

}

}

26. 如何判断触电是单击,还是双击?

答: 代码如下:

-(void) touchesEne: (NSSet *)touches withEvent: (UIEvent *) event {

NSSet *allTouches = [event allTouches];

switch([allTouches count]) {

case 1:

UITouch *touch = [[allTouches allObjects] objectAtIndex:0];

switch([touch tapCount]) {

case 1:

//单机

break;

case 2:

//双击

break;

default:

break;

}

default:

break;

}

}

27. Coco2d的事件处理机制?

答: 看教程 没看懂. [预留].

28. 手机上的地图按照画面滚动方式,分为哪几类?

答: 3类;

(1)     纵向滚动

打飞机类游戏

(2)     横向滚动

超级玛丽

(3)     横纵向滚动

RPG类.

29. 制作场景地图时,主要考虑到哪些问题?

答:

(1)     移动位置控制 : 主角在地图中移动时必须考虑到地图中物体的障碍, 不能越过墙体, 必须通过木桥渡过河流.更加真实的模拟会要求主角在不同的地面上有不同的移动速度.

(2)     地图的动态变化 : 主角在游戏过程中的行为导致地图变化(永久变化,不是临时变化,如: 敌人尸体腐烂,慢慢消失, 这种效果不涉及到修改地图).摧毁敌方建筑,修建我方建筑等

30. 地图编程应该考虑哪些问题?

答:

(1)     如何展示一个较大的地图场景.

(2)     地图对精灵的移动限制.

(3)     如何动态的改变局部地图的显示内容

31. 如何设置Cocos2d-iphone程序的启动横竖屏?

答: 在RootViewController.m文件里.

找到如下代码:

#elif GAME_AUTOROTATION == kGameAutorotationUIViewController

return ( UIInterfaceOrientationIsLandscape( interfaceOrientation  ));

//return ( UIInterfaceOrientationIsPortrait( interfaceOrientation ) );

32. Map Editor工具的作用是什么? (Tiled地图编辑器,下载地址http://mapeditor.org/)

答: Map Editor是绘制场景地图的.生成的地图是*.tmx格式的(本质是XML文件).

注意:生成的地图,要与地图组成元素的*.png图片放在一起.

33. Cocos2d-iphone对于Tiled地图绘制工具的支持表现在哪些方面?

(1)     地图类型

& orthogonal  isometric完全支持

& hexagonal 部分支持

(2)     “瓦片”图集

& 不支持将图形文件保存到*.tmx文件中的嵌入式”瓦片”图集. 仅支持外部”瓦片”图集. 也就是说,地图必须是一个tmx文件和一个图像文件组成.

(3)     层

& Cocos2d-iphone 支持任意数量的层

& 每个层对应的编程接口类是TMXLayer (AtlasSpriteManager的子类)

& 每个 “瓦片” 对应的编程接口类是AtlasSprite

34. Cocos2d-iphone实现地图显示的2个主要组件文件是什么?

答: & 负责整体地图的显示: CCTMXTiledMap.h CCTMXTiledMap.m

& 负责xml文件读取和解析: CCTMXXMLParser.h   CCTMXXMLParser.m

35. 如何加载游戏地图呢?

答: CCTMXTiledMap *gameWorld = [CCTMXTiledMap tiledMapWithFile:@”Level1.tmx”];

[self addChild:gameWorld  z:0 tag:9];

36. CCTMXLayer的作用是什么?

答:CCTMXLayer是CCSpriteBatchNode的子类,我们知道CCSpriteBatchNode是把所有的图像缓存起来,CCTMXLayer的作用就是把地图的图像缓存起来,这样我们就能以”瓦片”单位取得地图上不同的”瓦片”.

37. 30帧/秒是什么意思?

答: 图像引擎以每秒30次的频率不断将内存数据所描绘的虚拟世界画到IPHONE屏幕上.

38. 由3类独立的程序逻辑组成了游戏程序的主要编程模型,是哪3类?

答:

(1)     用户输入: “触摸”或重力感应时玩家精灵下达各种指令

(2)     AI引擎指令: 由系统对非玩家精灵下达的各种指令

(3)     各类定时逻辑: 前两类指定直接修改游戏精灵状态.

各类定时逻辑根据各种精灵的相互位置信息判断可能触发的精灵或环境变化.

转载于:https://www.cnblogs.com/gnface/archive/2012/08/18/2645595.html

Cocos2d-iphone学习笔记相关推荐

  1. iphone学习笔记(一)

    之前写学习记录好久了,后来才发现一直写在日记里的别人都看不到,渐渐的懒病又犯了,现在下定决心将文章放出来,激励自己.(之前一直在博客园里写的) 找来找去,觉得还是看E文资料学习iphone开发比较靠谱 ...

  2. ios学习--iphone开发笔记和技巧总结(原址持续更新)

    ios学习--iphone开发笔记和技巧总结(原址持续更新) 分类: ios Object-C2012-04-18 10:16 2716人阅读 评论(1) 收藏 举报 uiviewiphonelist ...

  3. iphone开发笔记和技巧总结

    在iphone程序中实现截屏的一种方法: //导入头文件   #importQuartzCore/QuartzCore.h //将整个self.view大小的图层形式创建一张图片imageUIGrap ...

  4. [源码、文档、分享] iOS/iPhone学习系列、代码教程----~~~持续更新中~~~

    转自:http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7%B3%BB%E5%88%97%E3%80%81%E4%BB%A3 ...

  5. [源码、文档、分享] iOS/iPhone学习系列、代码教程(转)

    iOS/iPhone学习系列.代码教程----~~~持续更新中~~~ http://www.devdiv.com/iOS_iPhone-iOS_iPhone%E5%AD%A6%E4%B9%A0%E7% ...

  6. cocos2d-x 学习笔记(1)关于cocos2d-x(环境配置,项目结构,文件说明)

    cocos2d-x 学习笔记(1)关于cocos2d-x(环境配置,项目结构,文件说明) 1.问:什么是cocos2d-x? 是一套开放源代码,主要基于c,c++语言,针对windows,linux, ...

  7. Python学习笔记__13.2章 requests

    # 这是学习廖雪峰老师python教程的学习笔记 相比于Python内置的urllib模块,使用requests可以更好地处理URL资源. 1.使用requests 1)通过GET访问一个页面 > ...

  8. ios开发学习笔记--Core Motion

    iOS开发学习笔记之CoreMotion-运动传感器 官网文档:CoreMotion Framework Reference 一.     简介 现在的苹果手机都基本有运动传感器,能够过获取到设备的加 ...

  9. cocos2d-x学习笔记15:cocos2d-x教程资源总结

    注:cocos2d可作为cocos2dx的参考,两者接口很相似. 名称:知易的<知易Cocos2D-iPhone开发教程> 官方地址:http://blog.sina.com.cn/s/a ...

  10. CososJS学习笔记(1) 环境配置(填坑版,让你少走弯路!)

    这段时间比较了国外的phaser.pixi.create等h5游戏框架以及国内的egret.cocosjs之后,最后还是决定使用cocosjs进行h5游戏的开发. 先简单地说一下个人的观点:首先pix ...

最新文章

  1. WCF(Sender) to MSMQ to WCF(Receiver)
  2. linux c:关联变量的双for循环
  3. 搜狗高速浏览器提示您 怎么关闭_那些浏览器中的快捷键们
  4. 监控员工离职倾向系统已被下架,网友:劝你善良
  5. 【PM】当大厂来临时,求生?求胜?
  6. centos7利用nexus离线搭建局域网pypi源
  7. 多通路fpga 通信_多核DSP和FPGA之间的高速SRIO通信
  8. 如何在Linux中找到您的IP地址
  9. c语言数组冒泡排序程序的解释,c语言指针数组冒泡排序代码
  10. Flutter从入门到进阶
  11. 一个关于超级英雄题材电影剧本的脑洞
  12. Leetcode 814.二叉树剪枝
  13. 详解SQL2005中的AWE
  14. 中金财富:如何获取不“平均”的收益?
  15. 矩阵的几个基本概念(一)
  16. Unrecoverable error: corrupted cluster config file.
  17. openstack里给云主机配置vip
  18. eclipse中左边的package文件列表不见了,解决方法
  19. DH算法 | 迪菲-赫尔曼Diffie–Hellman 密钥交换及RSA(学习笔记)
  20. ObjectARX曲线交点的顺序

热门文章

  1. 洪荒修真服务器名字可以修改吗,洪荒修真变态版
  2. 开源云服务器集群管理系统,云树·DMP : 数据库集群管理平台
  3. 计算机命令提示符开热点,将win7电脑变身wifi热点操作方法_电脑怎么开热点win7...
  4. Android仿支付宝9.5芝麻信用分仪表盘
  5. leetcode 85. Maximal Rectangle(最大矩形)
  6. css做出京东登录界面
  7. 单片机音频节奏灯_基于单片机的音乐节奏彩灯控制系统设计
  8. c语言int转换为bytes,__c语言__整型、实型的存储(十进制转二进制)
  9. web如何加入视频?video
  10. 【2021-01-11】JS逆向之美团模拟登入