书籍详情
《精通Cocos2d-x游戏开发(基础卷)+精通Cocos2d-x游戏开发(进阶卷)(套装共2册)》[92M]百度网盘|亲测有效|pdf下载
  • 精通Cocos2d-x游戏开发(基础卷)+精通Cocos2d-x游戏开发(进阶卷)(套装共2册)

  • 出版社:辽宁无限穿越图书专营店
  • 作者:王永宝 著
  • 出版时间:2017-04-01
  • 热度:8871
  • 上架时间:2025-01-04 08:18:29
  • 价格:0.0
书籍下载
书籍预览
免责声明

本站支持尊重有效期内的版权/著作权,所有的资源均来自于互联网网友分享或网盘资源,一旦发现资源涉及侵权,将立即删除。希望所有用户一同监督并反馈问题,如有侵权请联系站长或发送邮件到ebook666@outlook.com,本站将立马改正

内容介绍

基本信息

  • 商品名:精通Cocos2d-x游戏开发(基础卷)+精通Cocos2d-x游戏开发(进阶卷)(套装共2册)
  • ISBN:9787302432029
  • 定价:168.8
  • 出版社:清华大学出版社
  • 作者:王永宝

参考信息(以实物为准)

  • 出版时间:2017-04-01
  • 印刷时间:2018-06-01
  • 版次:1
  • 印次:1
  • 包装:平装
  • 开本:16开
  • 用纸:胶版纸
  • 页数:931
  • 字数:1486000

编辑推荐

Cocos2d-x创始人王哲先生倾情推荐!

资深游戏程序员,四年时间,三易其稿,精心打磨,成就精良之作

快速入门 → 基础框架 → UI与交互 → CocoStudio工具链 → Cocos2d-x实用技术 → Lua技术 → 网络游戏开发 → 跨平台开发

专注于Cocos2d-x引擎底层机制,致力于让初学者成为一个基础扎实、靠谱的程序员

深入剖析了大量隐藏在背后的细节、解决问题的方法和思路,以及各种实用技巧和建议

深入讲解了指针、内存、纹理等大多数初学者掌握不牢固的重要知识点

深入剖析了Cocos2d-x引擎在Android、Win32和iOS等系统下的运行流程

深入介绍热更新、加密和解密、骨骼动画、调试技巧和物理引擎等实用技术

详解在Cocos2d-x中使用Lua的技巧,以及Quick-Cocos2d-x框架和原生Lua框架的区别

重点介绍弱联网、强联网和□域网这三种网络游戏的前后端开发

详解iOS和Android平台下的开发和打包,涵盖证书签名、ABI、JNI等实用技术

详解如何使用AnySDK在iOS和Android下快速接入第三方SDK

提供QQ交流群和E-mail等交流方式,为读者答疑解惑

内容简介

  《Cocos2d-x游戏开发》分为《基础卷》和《进阶卷》两个分册。两卷书籍都有明确的写作目的。《基础卷》专注于Cocos2d-x引擎基础,致力于让Cocos2d-x初学者成为一个基础扎实、靠谱的程序员。《进阶卷》专注于各种实用技术,是作者多年开发经验的结晶,书中的技术点大多是基于实际工作中碰到的问题提炼而来,从问题的本质出发到解决问题的思路,提供了多种解决方案,并对比各方案的优缺点,启发读者思考。
  《Cocos2d-x游戏开发》的《基础卷》,共31章,分为4篇。第1篇为《入门篇》,涵盖的主要内容有Cocos2d-x开发环境、学习建议、注意事项及低级错误总结,以及必备的C++编程基础和指针知识等。第2篇为《基础框架篇》,涵盖的主要内容有节点系统、内存管理、场景和层、精灵、动作系统、动画、纹理、文字、运行机制、渲染机制、消息机制和Schedule等。第3篇为《UI与交互篇》,涵盖的主要内容有触摸输入、文本输入、按钮与重力感应输入、Menu和MenuItem,以及GUI框架的功能控件、文本输入、文本显示及容器控件等。第4篇为《CocoStudio工具链篇》,涵盖的主要内容有CocoStudio的UI编辑器、场景编辑器、动画编辑器、2.x编辑器及CocosBuilder等。
  《Cocos2d-x游戏开发》的《基础卷》适合学习Cocos2d-x游戏开发的零基础读者阅读,尤其适合Cocos2d-x自学人员。对于大中专院校的学生和社会培训班的学员,本书也是一本不可多得的学习教程。

  《精通Cocos2d-x游戏开发》的《进阶卷》,共36章,分为4篇。第1篇为“实用技术篇”,主要内容有加密解密、增量更新、分辨率适配、调试技巧、Shader特效、裁剪遮罩、物理引擎、骨骼动画、CocoStudio*实践等实用技术。第2篇为“Lua篇”,主要内容有Lua的基础知识、Lua的table与面向对象、C/C++与Lua的通信、Cocos2d-x原生Lua框架与Quick-Cocos2d-x Lua框架等。第3篇为“网络篇”,主要内容有网络基础、select IO复用、Socket和Libcurl等基础知识,以及弱联网、强联网、□域网等网络游戏的客户端和服务端开发。第4篇为“跨平台篇”,主要内容有Android和iOS平台的开发和打包知识,以及如何使用AnySDK快速接入第三方SDK。
  《精通Cocos2d-x游戏开发》的《进阶卷》适合使用Cocos2d-□□行游戏开发的中高级读者阅读,尤其适合在使用Cocos2d-x开发过程中碰到问题的程序员,以及希望学习一些实用技术,从而丰富自身经验的程序员。对于大中专院校的学生和社会培训班的学员,本书也是一本不可多得的学习教程。

  《Cocos2d-x游戏开发(基础卷)》内容速览:

  1. 入门篇
  Cocos2d-x启航
  使用Cocos2d-x
  低级错误大全
  图解指针
  C++11简介
  2. 基础框架篇
  节点系统
  内存管理
  场景和层
  精灵详解
  动作系统
  播放动画
  纹理详解
  显示文字
  运行机制
  渲染机制
  消息机制
  Schedule详解
  3. UI与交互篇
  触摸输入
  文本输入
  按钮与重力感应输入
  Menu和MenuItem
  GUI框架概述
  GUI框架功能控件
  GUI框架文本输入和显示
  GUI框架容器控件
  4. CocoStudio工具链篇
  CocoStudio概述
  CocoStudioUI编辑器
  CocoStudio场景编辑器
  CocoStudio动画编辑器
  CocoStudio 2.x编辑器
  CocosBuilder

  《Cocos2d-x游戏开发(进阶卷)》内容速览:

  5. 实用技术篇:

  文件读写

  加密与解密

  声音与音效

  分辨率适配

  CocoStudio实践

  调试Cocos2d-x

  调试技巧总结

  物理引擎——Box2d基础

  物理引擎——应用到Cocos2d-x

  图元渲染

  Spine骨骼动画

  2D、3D粒子特效

  裁剪与遮罩

  使用Shader——GLSL基础

  使用Shader——常用特效

  6. Lua篇:

  Lua基础语法

  Lua——Table

  Lua与C的通信

  Cocos2d-x原生Lua框架详解

  Cocos2d-x Quick框架详解

  Quick框架实践——MVC框架

  7. 网络篇:

  网络游戏——网游开发概述

  弱联网游戏——Cocos2d-x客户端实现

  弱联网游戏——PHP服务器实现

  强联网游戏——TCP和Socket

前言序言

  第一次接触Cocos2d-x是在2012年初。当时与一位朋友尝试着制作了一款小游戏,上了App Store平台。在开发中,笔者主要负责游戏美术,这其实不是笔者的长项,所以该游戏的美术效果可以用惨不忍睹来形容。虽然那时候的引擎版本只是1.x,并且开发的游戏相当失败,但通过这个游戏,笔者对Cocos2d-x产生了浓厚的兴趣。

  

  其实Cocos2d-x算不上是一款功能超强的游戏引擎,但它很简洁、小巧,是一款轻量级的游戏引擎。大多数程序员实际上更喜欢简洁的东西,而不是庞然大物。Cocos2d-x简洁的设计结合丰富的Demo,让人可以很快上手,并能使用它开发出一些简单的游戏。其代码的开源及跨平台特性也相当诱人。Cocos2d-x本身的这些特性结合市场的需求,使其很快就成为了手游开发的主流引擎之一。

  

  在Cocos2d-x刚开始火的那一段时间,市面上关于Cocos2d-x的书籍还十分匮乏。笔者利用业余时间对该引擎进行了深入研究,并能使用它开发了几个小游戏,也总结了一些开发经验。之后一段时间,笔者萌生了按照自己的想法写一本Cocos2d-x游戏开发图书的想法。这个想法很快便进入了实施阶段,但进展远没有想象的顺利。其原因一方面是笔者写作的速度跟不上Cocos2d-x的更新速度,另一方面是笔者的工作任务也很重,加之写作期间还开发了四五个游戏作品,这使得笔者本来就不充裕的时间更是捉襟见肘。

  

  的确,Cocos2d-x的更新非常频繁,并且引擎更新的同时带来了很多接口的□化,一些代码甚至需要进行重构。除了原有内容的□化改动之外,日益增加的新功能也加大了写作的难度。虽然2013年底笔者已经完成了初稿,但是回过头来阅读一遍,发现书稿难以达到自己的预期。于是笔者做了一个决定:推翻重写。在经历了几个月的重写之后,Cocos2d-x版本已经升级到了3.0。笔者发现又有许多新增功能和新特性需要重新了解和学习,于是又经历了一段时间的学习和使用,不得不决定再次对该书做较大的改动,几乎又推翻重写了一次。可以说,这几年笔者的业余时间只做了这么一件事情。从开始写作直至完成书稿,整个过程虽然寥寥数语,但却饱含艰辛。在写作的过程中,Cocos2d-x的书籍如雨后春笋,加上自己工作繁忙,写作时间所限,甚至还有放弃的念头。但写一本自己满意的Cocos2d-x图书的信念支撑笔者走到了最后。当然,这一切对笔者而言很有意义,也很有价值:其一是有机会能和读者共享自己的心得体会;其二是自己也得到了提升。毕竟写书相对于写代码而言需要考虑的东西更多。代码写错,还可以改正,而书写错则将误人子弟。

  

  考虑到读者群体的不同,笔者将本书分为《基础卷》和《进阶卷》两个分册。《基础卷》主要是为了让读者夯实Cocos2d-x游戏开发的基础知识,适合没有经验的零基础读者阅读。《进阶卷》的内容全面,且实用性很强,可以拿来就用,快速解决问题,适合想要进阶学习的读者阅读,也可以作为一本解决实际问题的手册使用。当然,对于想要全面而深入学习Cocos2d-x游戏开发的读者而言,则需要系统阅读这两本书方可。

  

  本书是《精通Cocos2d-x游戏开发》的《基础卷》,是一本略有深度的Cocos2d-x入门图书。本书系统地介绍了Cocos2d-x基础语法,并由浅入深介绍了Cocos2d-x游戏引擎底层的实现,同时还引申出了其他相关问题和使用时应该注意的事项。对于初学者,本书的部分内容可能略有些深入,如果遇到难以理解的地方,建议先跳过,等读完后续章节之后再回过头来阅读前面未理解的部分,相信对很多问题就有了新的认识。学习任何知识,基础都是重中之重,相信本书可以帮助读者打下Cocos2d-x游戏开发的坚实基础。

  

  本书内容特色

  

  1.内容新颖,紧跟趋势

  

  本书内容新颖,紧跟技术趋势,以当前主流的Cocos2d-x游戏引擎版本3.x为主进行讲解,在一些必要的地方也兼顾了早期的2.x版本的内容,并对新旧版本之间的差异做了必要说明,适合更多的读者群体阅读。

  

  2.追本溯源,注重核心

  

  本书用较多篇幅介绍了Cocos2d-x游戏引擎的基础框架,并对UI与交互的相关内容做了详细讲解。这些内容都是Cocos2d-x游戏引擎的核心技术,深入理解这些内容,便于读者更好地理解Cocos2d-x游戏引擎的底层实现。

  

  3.追求原创,与时俱进

  

  相较于市场上千篇一律的Cocos2d-x学习教程,本书力求做到与众不同,与时俱进。书中的内容不是堆砌知识点和简单地翻译技术文档,而是从学习和理解的角度出发,并结合作者的实际开发经验,按不同层次读者的学习特性组织内容和讲解,从而达到更好的讲授效果。

  

  4.由浅入深,循序渐进

  

  本书内容编排非常科学,讲解时先抛出一些简单的问题供读者思考,然后发散思维,再逐步扩展到更多、更深入的问题上,继而步步推进,抽丝剥茧,逐层深入,将读者顺利引领到不同阶段的学习之中。

  

  5.风格活泼,讲述准确

  

  刻板的风格不是笔者所钟爱的行文风格。笔者更喜欢用较为简单和自由的文字和读者交流,所以本书阅读起来并不会枯燥乏味。另外,讲解的准确性是科技图书的基本要求,只有准确的表达才能让读者不至于出现太多的理解偏差。所以笔者对书中的表述经过了反复斟酌和提炼,并采用了大量例图、举例和类比等手法,以便于读者更容易理解和掌握。

  

  6.举一反三,扩展思维

  

  本书并不满足于按部就班地介绍功能和API,而是从实际应用出发,扩散思维,在解决问题的同时,让读者思考问题的本质,以更深入地理解所学知识,从而达到举一反三,学以致用的效果。即所谓知行合一,方能真正掌握知识。

  

  本书内容及知识体系

  

  第1篇  入门篇(第1~5章)

  

  本篇属于Cocos2d-x开发的基础铺垫,涵盖的主要内容有Cocos2d-x开发环境搭建、学习建议、注意事项及低级错误总结,以及必备的C++编程基础和指针等。本篇主要是给没有任何Cocos2d-x使用经验的读者作为铺垫阅读。其中,图解指针和C++11简介这两章内容适合由Unity3D(简称U3D)、Java或其他语言转到Cocos2d-x的读者阅读。

  

  第2篇  基础框架篇(第6~17章)

  

  本篇主要介绍了Cocos2d-x的核心框架系统,属于Cocos2d-x开发必练基本功。本篇涵盖的主要内容有节点系统、内存管理、场景和层、精灵、动作系统、播放动画、纹理、文字显示、运行机制、渲染机制、消息机制和Schedule等。学习完本篇,读者可以掌握Cocos2d-x游戏引擎的运行原理及相关开发知识。

  

  第3篇   UI和交互篇(第18~25章)

  

  本篇专门介绍了Cocos2d-x的各种交互手段及整个GUI架构,同基础框架篇一样,本篇也属于Cocos2d-x的必练基本功。本篇涵盖的主要内容有触摸输入、文本输入、按钮与重力感应输入、Menu和MenuItem,以及GUI框架的功能控件、文本输入、文本显示及容器控件等。

  

  第4篇   工具链篇(第26~31章)

  

  工欲善其事必先利其器。本篇主要以CocoStudio的工具集为核心,介绍了常用工具的使用,解决了一些工具在使用过程中遇到的问题,适合想要了解或学习Cocos2d-x周边工具的读者阅读。本篇涵盖的主要内容有CocoStudio的UI编辑器、场景编辑器、动画编辑器、2.x编辑器及CocosBuilder等。

  

  本书阅读建议

  

  由于Cocos2d-x游戏引擎是基于C++的,所以一些基础的C++知识是必须要知道的。假如读者完全没有任何编程方面的经验,就不适合阅读本书。虽然本书中也介绍了部分C++的相关知识,但那是有针对性的,并不是系统地介绍。所以,如果读者没有任何编程基础,可以先阅读一本类似于《C++入门很简单》之类的图书。虽然C++入门并不是想象的那么简单,但这类图书还是可以让你对C++建立一个系统的了解。

  

  书中部分章节的内容可能较为深入,如果读者对这部分内容一时难以理解,则可以先跳过而阅读后续章节,等读完后续章节再回头阅读这部分能容,也许就豁然开朗了。

  

  书中的部分例子引用自Cocos2d-x引擎自带的TestCpp,读者学习的过程中可以参照TestCpp中的例子。虽然本书偏重于理论,但其中介绍到的代码还是可以在TestCpp中编写、修改,并运行起来,从而加深理解。

  

  另外,切勿死记硬背。编程学习不等于应付考试,很多知识点可以现用现查,解决问题就行。读者应该把注意力放在对编程本质的理解上。

  

  本书读者对象

  

  零基础学Cocos2d-x游戏开发的人员;

  

  Cocos2d-x自学人员;

  

  想系统学习Cocos2d-x的程序员;

  

  想巩固和深入理解Cocos2d-x基础的程序员;

  

  想开发跨平台手机游戏的人员;

  

  从其他开发转向Cocos2d-x的程序员;

  

  大中专院校的学生和社会培训的学员。

  

  本书是《精通Cocos2d-x游戏开发》的《进阶卷》,是一种实用的Cocos2d-□□阶图书,是在笔者完成《基础卷》写作之后,用了一年多的时间编写的。这一年多笔者工作繁忙,压力巨大,几乎很难在晚上10点之前下班,通常晚上一两点下班是家常便饭。*长的□□记录是到了第二天早上9点,也就是正常上班的时间。笔者在这种情况下利用大量业余时间写作完成书稿,实属不易。在写作过程中,笔者不断地将之前已完成的书稿中的一些过时内容及难以令自己满意的内容推翻重写,力求完美。

  

  虽然工作繁忙,但笔者在工作中积累的经验也成为了《进阶卷》的宝贵素材。本书介绍了丰富的实用技巧,针对开发过程中需要用到的各种技术及可能碰到的各种问题,做了全面而深入的介绍。无论是需要解决问题的读者还是需要增长经验的读者,都能通过阅读本书有所收获。本书对读者的要求略高,需要读者熟悉Cocos2d-x,*好能有一定的开发经验。虽然在编写时笔者尽量做到了图文并茂,让内容更加通俗易懂,但对于初学者而言还是有一定的难度。所以建议初学Cocos2d-x的读者先阅读《基础卷》,以巩固好基础,然后再来阅读《进阶卷》,这样学习效果会更好。如果是有针对性地解决某一问题,读者可以阅读相应章节。欢迎读者在本书的QQ群中对阅读中的疑问进行交流和讨论。相信本书能够让每一个基础扎实的Cocos2d-x程序员成为一个经验丰富的Cocos2d-x开发高手。
  本书内容特色
  1.内容新颖,紧跟趋势
  本书内容新颖,紧跟技术趋势,以当前主流的Cocos2d-x游戏引擎版本3.x为主进行讲解,在一些必要的地方也兼顾了早期的2.x版本的内容,并对新旧版本之间的差异做了必要说明,适合更多的读者群体阅读。
  2.覆盖面广,实用性强
  本书专注于解决开发过程中碰到的各种问题,介绍各种常用的开发技术,涵盖了游戏客户端开发的大部分问题。
  3.追求原创,与时俱进
  相较于市场上千篇一律的Cocos2d-x学习教程,本书力求做到与众不同,与时俱进。书中内容的组织不是堆砌知识点和简单地翻译技术文档,而是从学习和理解的角度出发,并结合了笔者的实际开发经验,使用绝大多数章节都是“干货满满”。
  4.风格活泼,讲述准确
  刻板的风格不是笔者所钟爱的行文风格。笔者更喜欢用较为简单和自由的文字和读 者交流,所以本书阅读起来并不会枯燥乏味。另外,讲解的准确性是对科技图书的基本 要求,只有准确的表达才能让读者不至于出现太多的理解偏差。所以笔者对书中的表述经过了反复斟酌和提炼,并采用了大量例图、举例和类比等手法,以便于读者更容易理解和掌握。
  5.举一反三,扩展思维
  本书并不满足于按部就班地介绍功能和API,而是从实际应用出发,扩散思维,在解决问题的同时,让读者思考问题的本质,以更深入地理解所学知识,从而达到举一反三、学以致用的效果。虽然本书介绍的是Cocos2d-x,但对技术点的介绍并不□限于Cocos2d-x,对于使用其他引擎的开发者,很多知识都是相通的,即所谓知行合一,方能真正掌握 知识。
  本书内容及知识体系
  第1篇 实用技术篇(第1~16章)
  本篇深入介绍了Cocos2d-x游戏开发的各种实用技术,涵盖了热更新、加密解密、骨骼动画、调试技巧、Shader特效、物理引擎、分辨率适配等实用的技术点。读者可以根据自己的需求和兴趣挑选本篇的章节进行阅读。
  第2篇 Lua篇(第17~22章)
  本篇介绍了在Cocos2d-x中使用Lua开发的技巧,包含了Lua的基础知识,以及在Cocos2d-x中如何使用Lua,分析了Quick-Cocos2d-x框架和原生Lua框架的区别。
  第3篇 网络篇(第23~31章)
  本篇介绍了如何使用Cocos2d-x开发网络游戏,包含了网络基础知识的讲解,以及弱联网、强联网、□域网这3种网络游戏的前后端开发,并提供了一个简易横版实时对战游戏的Demo,相信读者可以在Demo中更好地了解网络游戏的开发知识。
  第4篇 跨平台篇(第32~36章)
  跨平台开发是Cocos2d-x程序员所必须掌握的知识,初次进行跨平台移植的读者难免会遇到不少问题,本篇详细介绍了iOS和Android平台下的开发和打包,涵盖了丰富的知识点,如证书签名、ABI、JNI等技术。打包也不是简单地罗列操作步骤,对打包过程中遇到的各种问题都会追本溯源。另外本篇还介绍了如何使用AnySDK在iOS和Android下快速接入第三方SDK。
  本书阅读建议
  由于Cocos2d-x游戏引擎是基于C++的,所以一些基础的C++知识是必须知道的。假如读者完全没有任何编程方面的经验,则不适合阅读本书。
  书中部分章节的内容可能较为深入,如果读者对这部分内容一时难以理解,可以先跳过而阅读后续章节,等读完后续章节再回头阅读这部分内容,也许就豁然开朗了。如果是为了解决某个问题或者系统学□□个技术点,这种有针对性的阅读效率会更高。
  本书中的部分例子引用自Cocos2d-x引擎自带的TestCpp,本书的配套资源中也提供了本书的代码下载方式,读者在学习的过程中可以参照TestCpp中的例子。
  本书读者对象
  * 有一定Cocos2d-x游戏开发经验的人员;
  * Cocos2d-x开发人员;
  * 想系统学习Cocos2d-x的程序员;
  * 想丰富Cocos2d-x开发经验的程序员;
  * 想开发跨平台手机游戏的人员;
  * 从其他开发转向Cocos2d-x的程序员;
  * 大中专院校的学生和社会培训的学员。
  本书配套资源获取方式
  本书涉及的源代码等资源需要读者自行下载。请读者登录清华大学出版社网站,然后搜索到本书页面,在页面上找到“资源下载”栏目,然后单击“课件下载”或者“网络资源”按钮即可。读者也可以在笔者的github中获取。
  本书的编写对笔者而言是一个不小的挑战,虽然笔者投入了大量的精力和时间,但只怕百密难免一疏。若读者在阅读本书时发现任何疏漏,希望能及时反馈给我们,以便及时更正。联系我们请发邮件至bookservice2008@163.com。
  *后祝各位读者读书快乐,学习进步!
  编者著

  

目录

《Cocos2d-x游戏开发(基础卷)》

第1篇  入门篇
第1章  Cocos2d-x启航
第2章  使用Cocos2d-x
第3章  低级错误大全
第4章  图解指针
第5章  C++11简介
第2篇  基础框架篇
第6章  节点系统
第7章  内存管理
第8章  场景和层
第9章  精灵详解
第10章  动作系统
第11章  播放动画
第12章  纹理详解
第13章  显示文字
第14章  运行机制
第15章  渲染机制
第16章  消息机制
第17章  Schedule详解
第3篇  UI与交互篇
第18章  触摸输入
第19章  文本输入
第20章  按钮与重力感应输入
第21章  Menu和MenuItem详解
第22章  GUI框架概述
第23章  GUI框架之功能控件
第24章  GUI框架之文本输入和显示
第25章  GUI框架之容器控件
第4篇  CocoStudio工具链篇
第26章  CocoStudio概述
第27章  CocoStudio UI编辑器
第28章  CocoStudio场景编辑器
第29章  CocoStudio动画编辑器
第30章  CocoStudio 2.x编辑器
第31章  使用CocosBuilder

《Cocos2d-x游戏开发(进阶卷)》

第1篇  实用技术篇

第1章  文件读写

第2章  加密解密

第3章  增量更新

第4章  声音与音效

第5章  分辨率适配

第6章  CocoStudio最佳实践

第7章  调试Cocos2d-x

第8章  调试技巧总结

第9章  物理引擎——Box2d基础

第10章  物理引擎——应用到Cocos2d-x

第11章  图元渲染

第12章  Spine骨骼动画

第13章  2D、3D粒子特效

第14章  裁剪与遮罩

第15章  使用Shader——GLSL基础

第16章  使用Shader——常用特效

第2篇  Lua篇

第17章  Lua基础概述

第18章  Lua——table

第19章  Lua与C的通信

第20章  Cocos2d-x原生Lua框架详解

第21章  Cocos2d-x Quick框架详解

第22章  Quick框架实践——MVC框架

第3篇  网络篇

第23章  网络游戏——网游开发概述

第24章  弱联网游戏——Cocos2d-x客户端实现

第25章  弱联网游戏——PHP服务器实现

第26章  强联网游戏——TCP和Socket 369

第27章  强联网游戏——单机版动作游戏 390

第28章  强联网游戏——C++服务器实现 404

第29章  网络游戏——前后端网络同步 414

第30章  □域网游戏——使用UDP 423

第31章  □域网游戏——建立、搜索、加入房间 430

第4篇  跨平台篇

第32章  Android环境搭建 440

第33章  使用JNI实现C++与Java互调 461

第34章  iOS环境搭建与真机调试 492

第35章  Objective-C与C++互调 511

第36章  接入AnySDK 515

精彩书摘

  第5章 分辨率适配
  当在不同的分辨率下运行程序时,就会碰到分辨率适配的问题,如出现黑边、界面的一部分显示在屏幕外,我们希望程序在不同的分辨率下运行都能有良好的表现。在Cocos2d-x中,可以通过选择合适的分辨率适配策略,结合合适的坐标编码,适配各种不同的分辨率。而灵活使用Cocos2d-x的分辨率适配策略,还可以解决各种分辨率适配的难题。本章主要介绍以下内容:
  * Cocos2d-x适配策略。
  * 分辨率适配经验。
  * CocoStudio分辨率适配。
  5.1 Cocos2d-x适配策略
  可以在Cocos2d-x中调用CCEGLView的setDesignResolutionSize方法设置游戏的分辨率策略,以及我们的设计分辨率。
  setDesignResolutionSize()方法包含3个参数,分别是设计分辨率的宽和高,以及分辨率的适配策略。下面这行代码设置了960×640的设计分辨率,并使用了SHOW_ALL分辨率适配策略。
  Director::getInstance()->getOpenGLView()->setDesignResolutionSize(960, 640, ResolutionPolicy::SHOW_ALL);
  5.1.1 分辨率适配策略
  Cocos2d-x的分辨率适配一般不是为每一种分辨率设计一种布□方案,而是在一种分辨率下进行设计(也就是设计分辨率),然后通过分辨率适配策略,让程序能够适应不同的分辨率。Cocos2d-x提供以下5种分辨率适配策略。
  * EXACT_FIT以设置的分辨率为标准,按照该分辨率对x和y进行拉伸。
  * NO_BORDER不留黑边,不拉伸,等比缩放,有一个方向(上下或左右)可能超出屏幕。
  * SHOW_ALL设置的分辨率区域内全部可见,但上下左右都可能出现黑边。
  * FIXED_HEIGHT锁定分辨率的高度,宽度不管,可能出现黑边也可能超出屏幕。
  * FIXED_WIDTH锁定分辨率的宽度,高度不管,可能出现黑边也可能超出屏幕。
  通过图5-1~图5-3可以直观地了解到在不同分辨率下,各个分辨率适配策略的表现。以960×640为设计分辨率,然后通过调整窗口的实际分辨率,选择不同的适配模式进行观察。在PC上调用Director的setFrameSize()方法可以自定义窗口的尺寸,但不要在移动设备上设置FrameSize。
  首先是EXACT_FIT模式,当在不同的分辨率下运行时,界面的宽和高都会根据我们的设计分辨率进行缩放,例如,当设计分辨率是100×200,在200×300的分辨率下运行时,宽会放大2.0,高会放大1.5,当实际分辨率小于设计分辨率时,Cocos2d-x又会相应地缩小界面使其适配,如图5-1所示。
  图5-1 EXACT_FIT模式
  NO_BORDER模式下会根据实际分辨率进行等比缩放,不留黑边。首先按照EXACT_FIT模式的缩放规则计算出宽和高的缩放值,按照*高的缩放值进行等比缩放。当实际分辨率无法完整放下缩放后的界面时,会有一部分内容显示在屏幕外,如图5-1所示,当界面以NO_BORDER模式进行适配时,红色边框为界面的完整内容,红色边框左下角的红色原点为OpenGL窗口的原点坐标,如图5-2所示。
  图5-2 NO_BORDER模式
  SHOW_ALL模式下会根据实际分辨率进行等比缩放,完全显示界面的完整内容,与NO_BORDER模式相反,其会先按照EXACT_FIT模式的缩放规则计算出宽和高的缩放值,按照*低的缩放值进行等比缩放。由于是按照*小的分辨率进行缩放,所以左右和上下都有可能出现黑边,图5-3右侧图片中的红点处为OpenGL窗口的原点坐标,如图5-3所示。
  FIXED_HEIGHT和FIXED_WIDTH模式比较类似,它们会将高度或宽度锁定,按照高度或宽度进行等比缩放,另外一个方向既可能超出,也有可能留下黑边。这两种模式会先按照EXACT_FIT模式的缩放规则计算出宽和高的缩放值,FIXED_HEIGHT取高度缩放值进行等比缩放,保证设计分辨率的高度刚好铺满设计分辨率,FIXED_WIDTH取宽度进行等比缩放,保证设计分辨率的宽度刚好铺满设计分辨率。
  图5-3 SHOW_ALL模式
  5.1.2 坐标编码
  当我们的程序在不同的分辨率下运行时,setDesignResolutionSize()方法会对整个程序按照适配策略根据设计分辨率和实际分辨率进行缩放。在对坐标进行编码时,需要使用相对坐标编码,而根据窗口尺寸可以进行相对坐标的编码,如希望将一个节点放置在屏幕的正中间,就需要将其坐标的x和y分别设置为窗口尺寸的宽和高的1/2。相对左下角原点的坐标则可以直接使用绝对坐标,设置相对位置可以使得程序在不同的分辨率下运行,我们的对象都能够显示在正确的位置上。
  在使用相对坐标编码时,Director单例中有几个方法可以获取尺寸,下面了解一下这几个获取尺寸相关的方法。
  * getWinSize,获取OpenGL窗口的单位尺寸。
  * getWinSizeInPixels,获取OpenGL窗口的实际像素尺寸。
  * getVisibleSize,获取可视窗口的尺寸。
  * getVisibleOrigin,获取可视窗口左下角坐标的位置。
  另外GLView对象还提供了以下两个接口来获取其他的尺寸。
  * getFrameSize,获取设备或窗口的尺寸。
  * getDesignResolutionSize,获取设置的设计分辨率。
  如图5-4直观地演示了上面描述的各种尺寸,WinSize和WinSizeInPixels分别是当前整个OpenGL窗口的单位尺寸和像素尺寸。VisibleSize和VisibleOrigin可以共同构成当前窗口中实际可见部分内容的矩形范围,FrameSize为当前窗口或设备的真实尺寸。
  图5-4 WinSize与VisibleSize
  * WinSize分别为图5-4中左右两图的红色框范围,虽然看上去范围不同,但这是一个单位尺寸,所以值并没有□化,也就是原图尺寸960×640,一般等同于设计分辨率的尺寸,也是OpenGL窗口的单位尺寸。
  * WinSizeInPixels也对应图5-4两图中的红色框范围,但这个尺寸为实际占用的像素尺寸,所以在不同分辨率下有不同的值(程序逻辑中使用的坐标是单位尺寸,而非像素尺寸)。
  * VisibleSize表示可视内容的尺寸,在图5-4左图中为红色框范围,右图则为黄色框范围,也就是可以看到的有内容的显示区域尺寸。
  * VisibleOrigin表示可视内容的左下角坐标,分别是左右图中左下角的红点的位置,左图中OpenGL窗口原点的坐标与红点重叠,而右图中OpenGL窗口的原点为红色框的左下角,VisibleOrigin的Y轴比原点高了64个像素。
  * FrameSize为窗口或设备的实际尺寸,也就是图5-4中两个窗口的窗口大小1200×640。
  Cocos2d-x推荐使用VisibleSize和VisibleOrigin进行相对位置的计算,就是因为根据它们来计算可以保证我们的对象能够处于可视范围中。
  WinSize和(0,0)坐标构成了OpenGL窗口,VisibleSize和VisibleOrigin构成了可视窗口,可视窗口不会大于OpenGL窗口,因为OpenGL窗口以外的内容都是不可见的!但OpenGL窗口范围内的对象并不一定可见,如当屏幕窗口容不下OpenGL窗口时。可视窗口可以理解为OpenGL窗口和设备实际分辨率窗口相交的矩形区域。
  5.1.3 OpenGL窗口与可视化窗口
  绝大部分的游戏都可以使用FIXED_HEIGHT或FIXED_WIDTH模式来实现简单的分辨率适配,只需要在背景上将可能有黑边的内容进行填充即可。这两种模式与SHOW_ALL有些类似,就是都可能导致黑边或超出,但有一种本质区别,即它们的OpenGL窗口不同,这对于坐标编码是有巨大影响的!OpenGL窗口不同,说的是原点位置不同,WinSize、VisibleSize不同。
  在图5-5中,使用FIXED_HEIGHT和SHOW_ALL模式都是同样的表现,左右都会有同样的黑边,但FIXED_HEIGHT模式下的OpenGL窗口和可视化窗口对应的是图5-5中的黄色矩形区域(包括左右的黑边),而SHOW_ALL模式下的OpenGL窗口和可视化窗口对应的是图5-5中的红色矩形区域(不包括黑边)。
  图5-5 OpenGL窗口和可视化窗口
  *直观的表现就是,在(0,0)的位置创建一个对象,FIXED_HEIGHT模式下会出现在黄色矩形区域的左下角,而SHOW_ALL模式下会出现在红色矩形区域的左下角。SHOW_ALL模式下的黑边部分是不会出现任何显示对象的,因为不在OpenGL窗口中。而FIXED_HEIGHT模式则可以正常显示,所以只要背景图片大一些,将左右的黑边区域遮住,即可简单地解决适配黑边的问题。正是由于这种实现方式,FIXED_HEIGHT和FIXED_WIDTH模式才可以在背景上对可能有黑边的内容进行填充来解决黑边的问题。
  5.1.4 setDesignResolutionSize详解
  在了解了适配策略和Cocos2d-x的各种尺寸之后,下面来进一步了解setDesign- ResolutionSize()方法,setDesignResolutionSize()方法中会简单判断传入的设计分辨率的宽度和高度,以及分辨率适配策略,将这些参数保存并调用updateDesignResolutionSize()方法更新分辨率。
  void GLView::setDesignResolutionSize(float width, float height,
  ResolutionPolicy resolutionPolicy)
  {
  CCASSERT(resolutionPolicy != ResolutionPolicy::UNKNOWN, "should set
  resolutionPolicy");
  if (width == 0.0f || height == 0.0f)
  {
  return;
  }
  _designResolutionSize.setSize(width, height);
  _resolutionPolicy = resolutionPolicy;
  updateDesignResolutionSize();
  }
  在updateDesignResolutionSize()方法中,首先根据屏幕尺寸和设计分辨率计算出x和y方向的缩放值,然后根据分辨率适配模式选择*终的缩放值,计算完缩放值之后,再计算视口的大小。
  void GLView::updateDesignResolutionSize()
  {
  if (_screenSize.width > 0 && _screenSize.height > 0
  && _designResolutionSize.width > 0 && _designResolutionSize.height
  > 0)
  {
  _scaleX = (float)_screenSize.width / _designResolutionSize.width;
  _scaleY = (float)_screenSize.height / _designResolutionSize.height;
  //NO_BORDER模式下取*大的缩放值等比缩放
  if (_resolutionPolicy == ResolutionPolicy::NO_BORDER)
  {
  _scaleX = _scaleY = MAX(_scaleX, _scaleY);
  }
  //SHOW_ALL模式下取*小的缩放值等比缩放
  else if (_resolutionPolicy == ResolutionPolicy::SHOW_ALL)
  {
  _scaleX = _scaleY = MIN(_scaleX, _scaleY);
  }
  //FIXED_HEIGHT模式下取y轴缩放值等比缩放,并将设计分辨率的宽度调整为全屏的
  宽度
  else if ( _resolutionPolicy == ResolutionPolicy::FIXED_HEIGHT) {
  _scaleX = _scaleY;
  _designResolutionSize.width = ceilf(_screenSize.width/_scaleX);
  }
  //FIXED_WIDTH模式下取x轴缩放值等比缩放,并将设计分辨率的高度调整为全屏的
  高度
  else if ( _resolutionPolicy == ResolutionPolicy::FIXED_WIDTH) {
  _scaleY = _scaleX;
  _designResolutionSize.height = ceilf(_screenSize.height/_
  scaleY);
  }
  //计算视口的尺寸,并设置视口的矩形区域
  float viewPortW = _designResolutionSize.width * _scaleX;
  float viewPortH = _designResolutionSize.height * _scaleY;
  _viewPortRect.setRect((_screenSize.width - viewPortW) / 2,
  (_screenSize.height - viewPortH) / 2, viewPortW, viewPortH);
  //重置Director的成员□量来适应可视化矩形
  auto director = Director::getInstance();
  director->_winSizeInPoints = getDesignResolutionSize();
  director->_isStatusLabelUpdated = true;
  director->setGLDefaultValues();
  }
  }
  5.2 分辨率适配经验
  ……

作者简介

王永宝,自高一起就自学编程,至今10年有余。酷爱游戏开发,熟练掌握C/C++、Lua和C#等编程语言,擅长网络编程、高并发服务端架构设计、客户端框架设计和OpenGL等技术。2010年参加广东省“专业杯”软件设计大赛,在31所院校的86支队伍的激烈竞争中,凭借一个月内使用三门语言开发的塔防游戏而获得了一等奖。同年进入深圳市饭后科技有限公司,担任过C++服务端主程、Unity3D主程和Cocos2d-x主程,并作为技术负责人负责了多款游戏的开发。业余时间潜心研究游戏开发,也开发了多款游戏。

精彩书评

  永宝拥有丰富的一线研发经验,对Cocos引擎也有着深入而独到的理解。整整的四年时间里,他对这本书倾注了大量的心血,三易其稿,精心打磨。这份执着的热忱和精益求精的态度令人感动。宝剑锋从磨砺出,这本书内容新颖,紧跟趋势,注重本质,讲述准确,由浅入深,层层递进,既能够带领初学者打开Cocos开发世界的大门,也能帮助具有一定经验的开发者更上一层楼,是本不可多得的专业好书。

  ——Cocos2d-x创始人 王哲


相关推荐