搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
ios 5 cocos2d游戏开发实战
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787302303039
  • 作      者:
    (美)Steffen Itterheim, (德)Andreas Low著
  • 出 版 社 :
    清华大学出版社
  • 出版日期:
    2012
收藏
编辑推荐
  

 国内首本基于iOS5 cocos2d开发图书,本书升级版《iOS cocos2d 2游戏开发实战(第3版)》已出版,针对cocos2d2,源代码全面更新。
  
  
  海报:
  

展开
作者简介
  Steffen Itterheim,从20世纪90年代开始就一直热衷于游戏开发。他在Doom和Duke Nukem 3D社区表现活跃,并因此获得了他的第一份自由职业,成为3D Realms的一名beta测试人员。作为职业游戏开发者,Steffen拥有10多年的丰富经验,其中大部分时间担任Electronic Arts Phenomic的游戏和工具程序员。2009年Steffen第一次接触cocos2d,那时他与其他人共同创办了一家iOS游戏公司--Fun Armada。他乐于将自己的宝贵经验传授给其他游戏开发者,以帮助他们更上一层楼。有机会你可能会在白天看到他在住所附近茂密的葡萄园周围散步,也可能在晚上看到他在Nevada沙漠收集瓶盖。

  Andreas L·w,在10岁的时候有了一台Commodore C16,从那时起他就对计算机产生了狂热的兴趣。他自学了编写游戏的技术,并在1994年发布了自己的第一款游戏Gamma Zone,这是一款针对Commodore Amiga平台的游戏,用纯汇编语言编写完成。在获得电子工程学的学位后,他进入Harman International公司,负责为汽车行业开发具有语音识别功能的导航和娱乐系统。他开发了自己的编程语言和开发工具,现在世界上采用语音识别技术的每辆汽车都在使用他的编程语言和开发工具。
  iPhone出现后,他有了回归本行的打算,开始开发一款叫做TurtleTrigger的游戏。他意识到cocos2d社区存在对好的开发工具的强烈需求。于是,利用自己在游戏和工具开发方面的知识,他开发出了TexturePacker和PhysicsEditor,它们迅速成为cocos2d用户进行开发时必不可少的工具。
展开
内容介绍
  《iOS 5 cocos2d 游戏开发实战(第2版)》将引导您开发富有吸引力的2D游戏。书中展示了如何使用cocos2d这款强大的游戏引擎来开发iPhone和iPad游戏,此外还介绍了游戏中的瓦片地图、虚拟摇杆、Game Center等。
  本书主要内容:
  o 移动游戏开发的过程和最佳实践,包括精灵批处理技术、纹理图册、视差滚动、触屏以及加速计输入。
  o 使用Box2D、Chipmunk物理引擎以及其他cocos2d相关的库和工具提升游戏性能。
  o 在cocos2d应用中添加UIKit视图,以及在UiKit 视图中添加cocos2d。
  o 详细介绍Kobold2D开发环境及其预配置库,包括cocos3d和Lua。
  最重要的是,《iOS 5 cocos2d 游戏开发实战(第2版)》将从最基础的地方引领您开发游戏,一步一步地指导创建示例游戏。这些示例都是根据App Store中流行的游戏改编而成的,它们能让您了解cocos2d游戏引擎中重要的概念和相关工具的使用,比如TexturePacker(纹理图册)、PhysicsEditor(物理性状编辑器)、Particle Designer(粒子效果)、Glyph Designer(位图字体)等。
  本书详细介绍了cocos2d游戏引擎,关注的是创建完整cocos2d游戏的过程而不是展示大量的iOS SDK 或OpenGL代码。同时还介绍了不同的实现方法,展示了用来辅助cocos2d游戏开发最好且免费的商用工具,阐释了作者完善过的cocos2d游戏引擎--Kobold2D,让您的游戏在App Store中更具竞争力。
展开
精彩书摘
  cocos2d 中的内存管理问题
  本节将针对内存管理和自动释放消息的内容进行一些讨论。在采用引用计数机制的Objective-C 中,内存管理遵守以下两条简单的规则:
  ● 如果你拥有(通过alloc、copy 或retain 得到)一个对象,就必须在用完之后释放它。
  ● 如果你已经向一个对象发送了自动释放消息,就不该再释放它。
  通常来说,当在Objective-C 中创建一个对象时会调用alloc 方法。一旦调用alloc 方法,就有责任在不再需要该对象时释放它。以下代码展示了最典型的alloc/init 和release 循环:
  // allocate a new instance of NSObject
  NSObject* myObject = [[NSObject alloc] init];
  // do something with myObject here “
  // release the memory used by myObject
  // if you don't release it, the object is leaked
  // and the memory used by it is never freed.
  [myObject release];
  由于iOS 应用程序总是使用自动释放池,因此可以通过调用autorelease 消息来避免发送release 消息。下面是用autorelease 重写后的代码示例:
  // allocate a new instance of NSObject
  NSObject* myObject = [[[NSObject alloc] init] autorelease];
  // do something with myObject here …
  // no need to call release, in fact you should not send release as it would crash.
  可见,autorelease 的出现从某种意义来说简化了内存管理问题,因为你再也不需要记着发送release 消息了。自动释放池为你做到了这一点,它会在晚一些时候对池中的各个对象发送release 消息。而增加autorelease 消息对创建对象来说,也只是增添了一点点复杂度而已。
  请看以下代码,它遵循常规风格来创建和释放CCNode 对象:
  // allocate a new instance of CCNode
  CCNode* myNode = [[CCNode alloc] init];
  // do something with myNode …
  [myNode release];
  大家普遍不倾向于使用这种创建cocos2d 对象的方式。用静态初始化方法更容易一些,而且将返回一个会被自动释放的对象。与苹果官方推荐的方法相反, cocos2d 对于autorelease 的使用已经内置到了引擎的设计中:它把诸如[[[NSObject alloc] init] autorelease]等调用写入了类的静态方法中。这是一件好事!这种设计让你不必再时刻盘算着哪些对象需要被释放,它使你避免了由于过度释放或内存泄漏而导致的程序崩溃风险。
  CCNode 类的静态初始化方法是”+(id) node“。以下代码将向self 发送alloc 消息,这等效于在CCNode 的实现中调用[CCNode alloc]:
  +(id) node
  {
  return [[[self alloc] init] autorelease];
  }
  上面对self 的调用方法更加普遍,而且对于C++程序员来说应该也更容易接受。
  现在可以用静态初始化方法来重写CCNode 的生成方法。不出所料,代码变得很简洁:
  // allocate a new instance of CCNode
  CCNode* myNode = [CCNode node];
  // do something with myNode …
  这就是使用自动释放对象的妙处。你不必再记着给对象发送释放消息。每一次cocos2d进入下一帧,那些不再使用的自动释放对象将被自动地释放。但这样做也有一个缺点:如果使用上述代码,然后在下一帧或者以后想要访问 myNode 对象时,你就会发现它已经不在内存中了。如果这时发送消息给它,将导致程序出现EXC_BAD_ACCESS 错误而崩溃。简单地把CCNode* myNode 变量当作类成员变量并不意味着对象使用的内存会被自动保留下来。如果想在下一帧或者以后的帧中访问自动释放对象,就必须保留它。并且,如果没有显式地将其添加为子节点,那么之后还是需要对其进行手动释放。
  有一种可以更好地使用自动释放对象的方法,并且不需要显式地调用retain 方法--可以将生成的CCNode 对象作为子节点添加到另一个派生自CCNode 的对象中,甚至可以删除成员变量而直接依赖cocos2d 来保存对象:
  // creating an autorelease instance of CCNode
  -(void) init
  {
  myNode = [CCNode node];
  myNode.tag = 123;
  // adding the node as children to self
  [self addChild:myNode];
  }
  -(void) update:(ccTime)delta
  {
  // later access and use the myNode object again
  CCNode* myNode = [self getChildByTag:123];
  // do something with myNode
  }
  addChild 将CCNode 对象添加到了一个集合中,本例使用了CCArray。CCArray 与iOS SDK的NSMutableArray 类似,但是效率比NSMutableArray 更高。CCArray、NSMutableArray,还有iOS SDK 中的任何其他集合都会自动地向每一个添加进来的对象发送retain 消息,也会对每个要删除的对象发送release 消息。所以,这样生成的对象可以一直存在,并保持有效且可访问状态。但是,当它们从集合中删除以后,对象也会被自动释放。
  上述方法对cocos2d 对象来说是最好的内存管理方式。有些开发者可能会告诉你自动释放不好或者速度很慢,不可听信他们。
  注意:
  苹果官方的开发者文档建议减少使用自动释放对象,但是大多数 cocos2d 对象都是自动释放对象,这样能使内存管理更为简单。如果使用alloc/init 和release 来管理每一个cocos2d 对象,那么会遇到很多麻烦,而且收效甚微。我不是说你永远都不会用到alloc/init;它们确实是有用的,而且有时候你可能必须使用它们。但是对于 cocos2d 对象来说,应该依赖于静态的自动释放初始化方法。自动释放对象只有一个缺点,那就是在游戏进入下一帧前,这些对象将一直占用内存。这就意味着,如果你在每一帧都生成许多很快就要被丢弃的自动释放对象,可能会浪费很多内存。不过这样的情况很少发生。
  ……
展开
目录
第1章  简介
1.1 本书第2版的新增内容
1.2 选择iOS版cocos2d的理由
1.2.1 免费
1.2.2 开源
1.2.3 Objective-C
1.2.4 2D游戏引擎
1.2.5 物理引擎
1.2.6 技术难度较低
1.2.7 依然需要编程
1.2.8 超棒的cocos2d社区
1.3 cocos2d-iphone项目的未来
1.4 其他cocos2d游戏引擎
1.5 本书读者对象
1.6 阅读前提
1.6.1 编程经验
1.6.2 Objective-C
1.7 本书内容
1.7.1 iOS游戏开发新手将学会什么
1.7.2 iOS应用程序开发者将学会什么
1.7.3 cocos2d开发者将学会什么
1.8 章  节介绍
1.9 本书的源代码
1.10 问题和反馈

第2章  入门
2.1 准备工作
2.1.1 系统要求
2.1.2 注册成为iOS开发者
2.1.3 证书和授权文件
2.1.4 下载并安装iOS SDK
2.1.5 下载并安装cocos2d
2.2 HelloWorld应用程序
2.2.1 HelloWorld文件在项目中的位置
2.2.2 资源
2.2.3 支持文件
2.2.4 HelloWorld类
2.3 cocos2d中的内存管理问题
2.4 改变世界
2.5 你还应该知道的
2.5.1 iOS设备
2.5.2 关于内存的使用
2.5.3 iOS模拟器
2.5.4 关于日志
2.6 本章小结

第3章  基础知识
3.1 场景图
3.2 CCNode类层次结构
3.3 CCNode类
3.3.1 节点的处理方式
3.3.2 动作的处理方式
3.3.3 消息调度
3.4 Director类、场景和层
3.4.1 Director类
3.4.2 CCScene类
3.4.3 场景和内存
3.4.4 推进和弹出场景
3.4.5 CCTransitionScene类
3.4.6 CCLayer类
3.5 CCSprite类
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证