Cocos2D-x权威指南

Cocos2D-x权威指南

作者:满硕泉
出版社:机械工业出版社
出版年:2013-4
页数:366
定价:69.00元
ISBN:9787111419136
样章下载:
http://wenku.it168.com/d_000896360.shtml

内容简介:
    本书是目前Coco2D-x领域内容较为全面、系统和极具实战性的一本著作,也是技术版本最新的一本著作。由国内资深的游戏开发工程师和移动应用开发工程师撰写。书中不仅系统讲解了Cocos2D-x的功能特性、使用方法、技术要点、高级知识、开发技巧、最佳实践和性能优化,还通过精心设计的游戏案例详细讲解了Cocos2D-x游戏设计与开发的完整过程,极具启发性和可操作性。更为重要的是,本书将游戏开发人员应该掌握的游戏开发思想也融入了其中。
    全书共16章,分为4个部分:准备篇(第1~2章)系统介绍了Cocos2D-x的核心概念、主要功能,以及它在Windows、Android、iOS等平台下的安装、配置、交叉编译环境的搭建,为后面的开发做准备;基础篇(第3~10章)重点讲解了Cocos2D-x的功能特性、使用方法、技术要点,包括Cocos2D-x中的核心类、动作、动画、特效、文字和字体、事件处理机制、地图、声音以及物理引擎等内容,具体结合Cocos2D-x自带的tests实例进行讲解,目的是让读者全面掌握Cocos2D-x的基础理论和基本使用方法;实战篇(第11~12章)利用Cocos2D-x开发了一款纵版射击游戏和横版动作游戏,旨在让读者深入了解完整的游戏开发流程和方法,以及如何将Cocos2D-x的理论知识用到实战中,而且两种游戏分别代表了纵版卷轴和横版卷轴,可以让开发者深入了解不同类型游戏的开发思想;高级篇(第13~16章)讲解了Cocos2D-x的高级知识、开发技巧以及最佳实践,包括粒子系统、游戏中常用算法在Cocos2D-x中的实现、内存管理与性能优化,以及Cocos2D-HTML 5等方面的内容。

前  言
为什么要写这本书
    在大学期间,我开始对移动游戏开发感兴趣,于是开始学习移动开发方面的相关知识,包括J2ME和Android等技术。现在,开始的好奇心和兴趣成就了我引以为豪的事业。在大四的时候,我到了天津猛犸实习,从J2ME平台到Android平台,从Android平台到iOS平台,我不仅接触了不同平台的开发,更学会了游戏开发的技巧和思想。如果说编程是一门艺术,那么游戏开发就是艺术中的艺术。作为一名游戏开发程序员,不仅要拥有熟练的编程技巧,还要对美术、策划和游戏有深入的理解。游戏程序员最重要的是游戏编程思想,因此当决定写这本书的时候,我深知不仅要分享Cocos2D-x相关的知识,更要分享游戏开发思想。
    作为从J2ME手机游戏时代走过来的开发者,我深知移动平台游戏可移植性的重要。J2ME这项技术的学习相对简单,应用这项技术进行开发的速度也比较快,而且当时几乎所有手机平台都支持Java,所以“一次编码,到处运行”也就不是梦想了。但是由于受机型的硬件性能所限,不同的平台在移植上也需要下一番工夫,针对不同屏幕、不同内存,往往需要开发不同的版本。当时的开发者根据经验,往往把很多种机型分组处理,为每组开发一个模板,然后再针对在不同机型上的运行情况做不同的调整,从而形成一种相对高效的开发模式。尽管在这个阶段手机设备的硬件水平普遍偏低,但是开发者经常可以通过美术、程序、策划三方的配合,开发出具有非常好的效果的游戏。由于J2ME的学习和开发都很简单,因此很少有成型的引擎,只是不同的游戏对应不同的框架。
    随着苹果iOS系统和iPhone、iPad等一系列产品的发布,随着Android系统和相应设备的诞生,移动平台的种类得到了丰富,并从单一的手机发展到平板电脑等多种手持设备上。而移动游戏的开发方式同样也有了改变,开发者们开始尝试针对不同平台的开发框架来进行开发。智能平台的硬件及性能的提高并没有带来游戏品质的提高,于是开发者们也探索着进行只针对单一平台的开发,他们利用平台特性(多点触屏,重力感应等)开发出了很多不错的游戏。虽然Android平台的屏幕及分辨率也是千差万别,但是由于出色的框架使得开发和移植变得简单起来,同时也不需要过多考虑内存的限制。但是问题依然存在,对于不同的智能平台(Android、iOS等操作系统)依然需要编写不同的代码来进行开发,如何跨平台这个问题摆在了开发者面前 。
    跨平台的引擎有基于HTML5的跨平台特性产生的开发引擎,也有基于OpenGL开发的游戏引擎,其中Cocos2D-x广泛受到开发者的关注,因为它不仅具有跨平台的特点,还具有受Cocos2D全球社区的支持、框架简单易学、十分容易上手等特点。经过一段时间的发展,开发者使用Cocos2D-x开发出了多款成功的游戏,包括捕鱼达人、地铁总动员等佳作。2012年年初,Cocos2D-x团队再次开发出两个分支,分别是支持Windows Phone的XNA版和支持HTML5的HTML5版,后者还得到了Google的赞助。在Zynga的帮助下,Cocos2D-x正在研发绑定JavaScript的Cocos2D-x2.0版本。随着Cocos2D及其分支的发展,Cocos2D会有更多跨平台特性,从而可以支持更多的平台,并且提高开发者的开发效率。相信Cocos2D-x将会更加受到广大开发者的欢迎。
    正因为这样,2011年年底我开始接触Cocos2D-x引擎,并在我的CSDN博客上(博客地址:http://blog.csdn.net/bill_man)写了一些相关的文章,当初的目的就是为自学留下些笔记以供以后参考,因为当时的Cocos2D-x参考资料还不是很多。后来逐渐发展为把我学习中遇到的问题与大家分享。慢慢地,通过使用,我发现Cocos2D-x是一个对开发者十分友好的游戏引擎,于是我希望把自己引擎的使用经验结合游戏开发经验更系统、更全面的分享出来,于是就有了这本书。
读者对象
    Cocos2D-x初级及中级开发者,了解C++语言和游戏开发的读者;
    没有接触过Cocos2D-x,但有过Cocos2D其他版本开发经验的开发者;
    没有Cocos2D-x和C++开发经验,但是有C、Java等语言开发经验的游戏程序员;
    相关项目的策划及管理人员;
    游戏开发爱好者;
    大专院校相关专业的师生。
    如何阅读本书
    本书分为四部分:
    第一部分(第1~2章)为准备篇,介绍了Cocos2D-x的下载与安装,以及交叉编译环境的搭建,为后面的开发做准备。
    第二部分(第3~10章)为基础篇,重点讲解了Cocos2D-x中的核心类、动作、动画、特效、文字、字体、事件处理、地图、声音以及物理引擎的使用,这部分结合Cocos2D-x自带的tests实例进行讲解,目的是让读者全面掌握Cocos2D-x的基础理论和基本使用。
    第三部分(第11~12章)为实战篇,采用Cocos2D-x分别开发了一款纵版射击游戏和横版动作游戏,旨在让读者深入了解Cocos2D-x的基础知识在游戏开发中的实战使用,而且这两款游戏分别代表了纵版卷轴和横版卷轴,可以让开发者深入了解不同类型游戏的开发思想。
    第四部分(第13~16章)为高级篇,在前面的章节基础上,介绍Cocos2D-x的粒子系统和相关粒子编辑器的使用,学习了Cocos2D-x实现常用的游戏算法、内存管理和调试方法,最后简单介绍了Cocos2D的一个新的分支—Cocos2D-HTML5。
    如果你是一名对Cocos2D-x有一定了解的开发者,可以从第3章开始阅读,而如果你是一个Cocos2D-x的初学者,请从第1章开始阅读。
勘误和支持
    由于作者的水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为了方便与大家交流,我专门申请了新浪微群(微群地址:http://q.weibo.com/1480459),大家有问题可以在群中提出,我会及时解答的,我还会在群中及时更正书中的错误,我也会将相应的功能更新及时发布出来。书中的全部源文件可以从华章网站下载。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱manshuoquan@sina.cn,期待能够得到你们的真挚反馈。
致谢
    首先感谢Cocos2D以及Cocos2D-x的开发团队,感谢他们为广大游戏开发者开发出一款如此优秀的游戏引擎。
    感谢我的“老东家”天津猛犸科技有限公司,感谢这家公司对我的锻炼和栽培,使我对游戏开发由“好奇”变成“爱好”,感谢公司中我的老师和好战友们,感谢他们和我并肩作战的日子,我在他们身上学到的东西让我对游戏开发有了更深的认识和热爱。
    感谢天津大学以及我的老师和同学们,尤其是我的编程启蒙老师罗凯先生。
    感谢CSDN网站上每一位阅读我文章的网友们,是你们给了我信心,让我一直写下去。
    感谢实战篇中游戏实例的美术人员:其中第11章游戏实例的美术人员为许鹏(新浪微博地址:http://weibo.com/ashjackt),第12章游戏实例的美术人员为李祖一(新浪微博地址:http://weibo.com/u/1893797647)。
    感谢机械工业出版社华章公司的杨福川和白宇,感谢二位老师在这一段时间中始终支持我的写作,是他们的鼓励和帮助引导我顺利完成全部书稿。可以说没有二位老师的帮助和支持,我不会有勇气写这本书。
    感谢我的爷爷和奶奶,他们是我人生的启蒙老师,尽管他们已经离开这个世界,但是我依然能感受到他们对我的支持和爱。
    最后感谢我的父母,他们不仅含辛茹苦抚养我长大,还教会我很多做人的道理,为了他们我要更加努力。
    谨以此书献给我最亲爱的家人,以及众多热爱游戏开发和Cocos2D-x的朋友们!

满硕泉(bill_man)
于中国天津 

作者简介: 满硕泉(bill man),资深手机游戏开发工程师和移动应用开发工程师,在Android和iOS两个平台上开发了多款游戏,对Cocos2D-x和Unity3D等游戏引擎有非常深入的研究,积累了丰富的经验。精通C++、Java、.NET和JavaScript相关的技术,近期关注HTML 5。活跃于CSDN和Cocos2D等技术社区,撰写了大量关于Cocos2D-x的文章,深受广大网友好评。

目  录

前 言
第一部分 准备篇
第1章 认识Cocos2D-x / 2
1.1 什么是Cocos2D / 2
1.1.1 Cocos2D的特点 / 2
1.1.2 Cocos2D的主要功能 / 3
1.1.3 Cocos2D的应用 / 5
1.2 什么是Cocos2D-x / 6
1.2.1 Cocos2D-x的特点 / 6
1.2.2 Cocos2D-x的主要功能 / 6
1.2.3 Cocos2D-x的应用 / 7
1.3 Cocos2D-x与Cocos2D-iPhone的比较 / 8
1.4 本章小结 / 10
第2章 搭建跨平台的开发环境 / 11
2.1 Windows下的开发环境配置 / 11
2.1.1 Cocos2D-x软件安装与配置 / 11
2.1.2 Cocos2D-x工程目录介绍 / 13
2.1.3 新建项目及交叉编译 / 14
2.2 Android下的开发环境配置 / 16
2.2.1 Cocos2D-x软件安装与配置 / 17
2.2.2 Cocos2D-x工程目录介绍 / 23
2.2.3 新建项目及交叉编译 / 23
2.3 iOS下的开发环境配置 / 27
2.3.1 Cocos2D-x软件安装与配置 / 27
2.3.2 Cocos2D-x工程目录介绍 / 28
2.3.3 新建项目及交叉编译 / 29
2.4 使用Doxygen工具生成Cocos2D-x文档 / 31
2.5 本章小结 / 33
第二部分 基础篇
第3章 Cocos2D-x中的核心类 / 36
3.1 节点类 / 36
3.1.1 CCNode类的成员数据 / 37
3.1.2 CCNode类的函数 / 38
3.1.3 坐标系简介 / 41
3.1.4 实例:通过节点控制屏幕中的全体渲染对象 / 43
3.2 导演类 / 46
3.2.1 CCDirector类的成员数据 / 46
3.2.2 CCDirector类的函数 / 47
3.2.3 实例:CCDirector类的使用 / 48
3.3 场景类 / 50
3.3.1 如何新建一个场景 / 50
3.3.2 场景的切换 / 52
3.3.3 场景间切换的动画 / 54
3.4 布景层类 / 56
3.4.1 CCLayer类的函数 / 58
3.4.2 颜色布景层类CCLayerColor / 59
3.4.3 多层布景层类CCLayerMultiplex / 61
3.4.4 菜单类CCMenu / 63
3.4.5 控件类及其子类 / 65
3.5 精灵类 / 69
3.5.1 CCSprite类的成员数据及函数 / 70
3.5.2 贴图类CCTexture2D / 71
3.5.3 精灵批处理类CCSpriteBatchNode / 72
3.5.4 精灵帧类CCSpriteFrame. / 73
3.5.5 精灵帧缓存类CCSpriteFrameCache / 73
3.5.6 实例:精灵类及其相关类的使用 / 74
3.6 摄像机类 / 79
3.6.1 CCCamera类的成员数据 / 80
3.6.2 CCCamera类的函数 / 80
3.6.3 实例:CCCamera类的使用 / 80
3.7 容器类 / 81
3.7.1 CCMutableArray和CCArray / 81
3.7.2 CCMutableDictionary和CCDictionary / 83
3.8 拖动渐隐效果类CCMotionStreak / 84
3.9 绘制图形 / 86
3.10 时间调度 / 88
3.11 本章小结 / 89
第4章 Cocos2D-x中的动作、特效与动画 / 90
4.1 动作类 / 90
4.1.1 CCAction类的主要成员数据和函数 / 90
4.1.2 基本动作 / 91
4.1.3 摄像机动作 / 102
4.1.4 基本样条动作 / 104
4.1.5 缓冲动作 / 108
4.1.6 组合动作 / 111
4.1.7 跟随动作 / 113
4.1.8 可调整速度动作 / 114
4.1.9 动作延时 / 116
4.1.10 改变动作执行对象 / 116
4.1.11 函数回调动作 / 117
4.1.12 过程动作 / 119
4.2 动作管理类 / 121
4.2.1 CCActionManager类的主要函数 / 122
4.2.2 CCActionManager类的使用 / 122
4.3 网格动作 / 123
4.3.1 Cocos2D-x中的网格 / 123
4.3.2 网格动作 / 124
4.3.3 清除网格 / 126
4.4 动画 / 126
4.4.1 Cocos2D-x中与动画相关的类 / 126
4.4.2 实例:Cocos2D-x中的动画 / 127
4.4.3 使用plist配置文件实现动画 / 130
4.5 本章小结 / 133
第5章 Cocos2D-x中的菜单项和文本渲染系统 / 134
5.1 菜单项 / 134
5.1.1 标签菜单项 / 134
5.1.2 精灵菜单项 / 135
5.1.3 触发器菜单项 / 135
5.1.4 实例:菜单项的使用 / 136
5.2 文本渲染类 / 138
5.2.1 CCLableAtlas类 / 139
5.2.2 CCLabelTTF类 / 140
5.2.3 CCLabelBMFont类 / 143
5.2.4 生成FNT配置文件的工具 / 144
5.3 本章小结 / 145
第6章 Cocos2D-x中的事件处理机制 / 146
6.1 触屏事件 / 146
6.1.1 触点类CCTouch / 146
6.1.2 单/多点触摸函数 / 147
6.1.3 加入触摸事件 / 148
6.1.4 单点触摸实例:主角随手指移动 / 151
6.1.5 多点触摸实例:缩放功能的实现 / 154
6.2 加速度传感器事件 / 156
6.2.1 CCAccelerometerDelegate类的函数 / 156
6.2.2 实例:加速度传感器事件的使用 / 157
6.3 按键事件 / 159
6.3.1 CCKeypadDelegate类的函数 / 159
6.3.2 实例:按键事件的使用 / 159
6.4 获得用户虚拟键盘输入 / 161
6.4.1 CCIMEDelegate类的函数 / 161
6.4.2 CCTextFieldTTF类的函数 / 161
6.4.3 实例:获得用户输入 / 162
6.5 滚动列表类 / 163
6.5.1 CCListView类及其相关类的函数 / 163
6.5.2 实例:滚动列表类的使用 / 164
6.6 本章小结 / 167
第7章 Cocos2D-x中的瓦片地图集 / 168
7.1 瓦片地图集及编辑器 / 168
7.1.1 瓦片地图的种类及用途 / 168
7.1.2 Tiled地图编辑器 / 169
7.1.3 用Tiled地图编辑器编辑地图 / 170
7.1.4 添加精灵层 / 173
7.1.5 Tiled地图编辑器数据文件 / 173
7.1.6 瓦片地图集类CCTMXTiledMap / 174
7.1.7 地图层类CCTMXLayer / 175
7.1.8 地图精灵组类CCTMXObjectGroup / 176
7.2 如何在Cocos2D-x中使用地图 / 176
7.2.1 新建地图类并在地图中显示 / 177
7.2.2 普通视角地图获得对应位置图素 / 178
7.2.3 45度角地图获得对应位置图素 / 179
7.2.4 GID值实例:种树 / 180
7.2.5 地图属性数据的使用 / 182
7.2.6 在地图中加入精灵 / 182
7.2.7 精灵层的使用 / 186
7.3 贴图地图类CCTileMapAtlas / 188
7.4 本章小结 / 189
第8章 Cocos2D-x中的声音、存储和网络 / 190
8.1 声音 / 190
8.1.1 Cocos2D-x在不同平台下支持的声音 / 190
8.1.2 SimpleAudioEngine类的常用函数 / 191
8.1.3 实例:SimpleAudioEngine类的使用 / 191
8.2 游戏存档 / 194
8.2.1 CCUserDefault类的常用函数 / 195
8.2.2 实例:CCUserDefault类的使用 / 195
8.3 网络连接 / 197
8.3.1 cURL基础知识 / 198
8.3.2 libcurl基础知识 / 198
8.3.3 实例:cURL的使用 / 200
8.4 本章小结 / 200
第9章 可视化场景编辑器 / 202
9.1 CocosBuilder简介 / 202
9.2 CocosBuilder编辑器的使用 / 202
9.2.1 CocosBuilder菜单操作 / 202
9.2.2 对象属性编辑 / 206
9.3 CocosBuilder的使用 / 210
9.3.1 CocosBuilder在Cocos2D-x中使用的相关类 / 210
9.3.2 实例:CocosBuilder在Cocos2D-x中的使用 / 212
9.4 本章小结 / 218
第10章 Cocos2D-x中的物理引擎 / 219
10.1 物理引擎 / 219
10.1.1 什么是物理引擎 / 219
10.1.2 物理引擎的作用 / 219
10.1.3 Box2D和Chipmunk的对比 / 220
10.2 Box2D物理引擎 / 220
10.2.1 Box2D引擎中的重要概念 / 221
10.2.2 Box2D的使用步骤 / 221
10.2.3 在Cocos2D-x中使用Box2D / 221
10.3 在Cocos2D-x中使用Chipmunk / 229
10.4 本章小结 / 233
第三部分 实战篇
第11章 纵版射击游戏:喵星战争 / 236
11.1 纵版射击游戏的特点 / 236
11.2 喵星战争简介 / 237
11.2.1 喵星战争的游戏规则 / 237
11.2.2 喵星战争的游戏框架和界面 / 237
11.3 喵星战争主游戏模块组成元素的实现 / 239
11.3.1 主角小猫的实现 / 239
11.3.2 敌人狗博士的实现 / 244
11.3.3 鱼骨子弹的实现 / 247
11.3.4 试管子弹的实现 / 248
11.3.5 游戏分数的实现 / 248
11.4 游戏主模块的实现 / 251
11.5 游戏主菜单的实现 / 256
11.6 关于界面的实现 / 259
11.7 本章小结 / 260
第12章 横版动作游戏:萝莉快跑 / 261
12.1 横版动作游戏的特点 / 261
12.2 萝莉快跑简介 / 262
12.2.1 萝莉快跑的游戏规则 / 262
12.2.2 萝莉快跑的游戏框架和界面 / 262
12.3 萝莉快跑主游戏模块组成元素的实现 / 264
12.3.1 主角萝莉的实现 / 264
12.3.2 星星的实现 / 268
12.3.3 地图的实现 / 269
12.4 游戏主模块的实现 / 273
12.5 游戏主菜单的实现 / 277
12.6 关于界面的实现 / 279
12.7 本章小结 / 280
第四部分 高级篇
第13章 粒子系统 / 282
13.1 什么是粒子系统 / 282
13.1.1 粒子系统的特点 / 283
13.1.2 粒子系统的构成 / 283
13.2 Cocos2D-x中的粒子系统 / 283
13.2.1 粒子系统基类CCParticleSystem / 285
13.2.2 放射式粒子系统CCParticleSystemQuad / 285
13.3 在Cocos2D-x中使用粒子系统 / 287
13.3.1 新建一个粒子系统CCParticleSystemQuad类 / 287
13.3.2 直接使用CCParticleSystemQuad类的子类创建粒子系统 / 289
13.3.3 使用粒子编辑器创建粒子系统 / 290
13.3.4 “清理”粒子系统 / 291
13.4 支持Cocos2D-x的粒子编辑器 / 291
13.4.1 Windows粒子编辑器Cocos2d Particle Editor / 292
13.4.2 粒子编辑器Particle Designer / 296
13.5 本章小结 / 303
第14章 游戏中常用算法在Cocos2D-x中的实现 / 304
14.1 A星算法 / 304
14.1.1 启发式搜索算法原理 / 304
14.1.2 什么是A星搜索 / 305
14.1.3 A星算法在Cocos2D-x中的实现 / 306
14.2 碰撞检测 / 318
14.2.1 碰撞检测的基本思想 / 319
14.2.2 碰撞检测在Cocos2D-x中的实现 / 320
14.3 本章小结 / 326
第15章 内存管理与性能优化 / 327
15.1 Cocos2D-x中的内存管理 / 327
15.1.1 Cocos2D-x内存管理的原则 / 327
15.1.2 Cocos2D-x中的图片处理 / 328
15.2 Cocos2D-x对图片渲染的控制 / 330
15.2.1 CCRenderTexture的使用 / 330
15.2.2 Cocos2D-x中绘制方法的对比 / 332
15.3 Cocos2D-x中处理图片的方法 / 333
15.3.1 高清图片的处理 / 333
15.3.2 抗锯齿处理 / 334
15.3.3 Mipmap处理 / 335
15.3.4 获得贴图数和大小 / 337
15.4 多语言混编Cocos2D-x / 337
15.4.1 Cocos2D-x中调用Objective-C  / 337
15.4.2 Cocos2D-x中调用Java / 338
15.5 Cocos2D-x的调试 / 339
15.5.1 Visual Studio中的调试方法 / 339
15.5.2 Eclipse中的调试方法 / 339
15.5.3 Xcode中的调试方法 / 342
15.6 Android中画面的缩放问题 / 346
15.6.1 等比例缩放 / 346
15.6.2 非等比例缩放 / 346
15.7 本章小结 / 348
第16章 Cocos2D的分支Cocos2D-HTML5 / 349
16.1 认识HTML5 / 349
16.2 如何使用Cocos2D-HTML5  / 350
16.2.1 搭建Cocos2D-HTML5的开发环境 / 351
16.2.2 Cocos2D-HTML5 2.0版本的新特性 / 355
16.2.3 Cocos2D-HTML5的HelloWorld项目介绍 / 355
16.3 Cocos2D-x的未来 / 363
16.4 本章小结 / 363
附录 Cocos2D-x中常见的宏 / 365
bb
                             Cocos2D-x权威指南封面

fj.pngCocos2D-x A.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16502878/viewspace-758699/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16502878/viewspace-758699/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值