Cocos2d-x 3.X手游开发实例详解

Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048、卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰然网创始人杨雍力荐

于浩洋 著  

ISBN 978-7-121-23998-4

2014年9月出版

定价:59.00元

356

16

编辑推荐

以Cocos2d-x V3.0为框架全面讲解手游开发的知识和方法

以热门游戏2048、卡牌为例,完整再现手游的开发过程

Cocos2d-x作者之一林顺和泰然网创始人杨雍力荐

知识点深入浅出,实例丰富,代码完备

线上交流平台,及时答疑解惑

内容提要

《Cocos2d-x 3.X手游开发实例详解》以Cocos2d-x V3.0 系列版本为框架,通过实例讲解手机游戏的开发知识和方法,着重通过实例提高读者的开发动手能力。涉及的内容包括:环境搭建、交叉编译以及打包部署;Cocos2d-x数据类型和基本概念的使用,如场景、导演、精灵等;使用Cocos2d-x 创建用户界面,如文本、菜单、滚动框等基本控件,以及一些扩展控件的使用;使用Cocos2d-x 创建动作,比如让精灵移动、跳跃、旋转,以及如何创建按顺序或同时进行的动作;使用Cocos2d-x 播放、停止、暂停、继续播放背景音乐和音效;Cocos2d-x 使用的触摸事件机制;在游戏中存储数据的几种方式;使用HTTP、Sockets、WebSockets 进行网络编程;在游戏中使用物理引擎Box2D、使用瓷砖地图、使用CocosBuilder 制作游戏界面等;Cocos2d-x 中的纹理和动画。最后通过两个完整的游戏开发实例讲解使用Cocos2d-x 开发游戏的全过程。

《Cocos2d-x 3.X手游开发实例详解》实例丰富,代码完备,知识点清晰简洁。《Cocos2d-x 3.X手游开发实例详解》所有实例均提供完整代码下载,书后附有代码清单概要,非常方便读者查找使用。此外作者还将Cocos2d-x 3.X 各版本间的区别用实例做了详细说明,且将在博客不断更新。

《Cocos2d-x 3.X手游开发实例详解》适合对Cocos2d-x 感兴趣及有志于学习和从事移动平台游戏开发的读者阅读参考。

目录

第1章  准备     1

1.1  Cocos2d-x简介     1

1.2  Cocos2d-x架构和目录结构     6

1.3  环境搭建     7

1.3.1  Windows开发环境搭建     7

1.3.2  Mac开发环境搭建     11

1.3.3  创建新项目     12

1.3.4  在Android上调试项目     14

1.3.5  打包APK文件     22

第2章  Cocos2d-x常用数据和方法     23

2.1  C++数据类型     23

2.2  Cocos2d-x封装的数据类型     24

2.2.1  布尔型Bool的使用     24

2.2.2  整型Integer的使用     25

2.2.3  浮点型Double、Float的使用     25

2.2.4  字符串String的使用     25

2.2.5  数组Array的使用     26

2.2.6  点Point的使用     27

2.2.7  尺寸Size的使用     28

2.2.8  矩形Rect的使用     29

2.2.9  字典Dictionary的使用     31

2.3  常用宏定义     32

2.3.1  数学相关宏的使用     32

2.3.2  断言宏CCAsset的使用     33

2.3.3  数组遍历宏CCARRAY_FOREACH和CCARRAY_FOREACH_REVER SE的使用     33

2.3.4  字典遍历宏CCDICT_FOREACH的使用     35

2.3.5  对象创建方法宏CREATE_FUNC的使用     36

2.3.6  属性定义宏CC_PROPERTY的使用     37

2.3.7  命名空间宏     39

2.4  Cocos2d-x中的坐标和坐标系     39

2.4.1  OpenGL坐标系和屏幕坐标系     39

2.4.2  锚点和位置的使用     40

2.4.3  节点坐标系和世界坐标系的相互转换     42

第3章  Cocos2d-x核心概念     45

3.1  基础节点     46

3.1.1  Node简介     46

3.1.2  Node应用举例之移除节点     47

3.2  相机     47

3.2.1  相机简介     47

3.2.2  使用CCCamera循环缩放点     48

3.3  导演     49

3.3.1  导演Director简介     49

3.3.2  Director常用功能举例     50

3.4  场景     51

3.4.1  场景定义     51

3.4.2  创建显示战斗场景     52

3.4.3  动态切换多个场景     53

3.5  布景     56

3.5.1  布景定义     56

3.5.2  使用Layer模拟Windows Phone主界面     57

3.6  精灵     59

第4章  Cocos2d-x用户界面     61

4.1  文本渲染     61

4.1.1  制作fnt格式字体     62

4.1.2  使用LabelBMFont显示文本     66

4.1.3  使用LabelTTF显示文本     67

4.1.4  使用LabelAtlas显示文本     70

4.2  菜单     71

4.2.1  菜单和菜单项的简单使用     72

4.2.2  使用菜单制作游戏菜单功能     74

4.3  滚动框     80

4.3.1  使用ScrollView显示多页内容     80

4.3.2  监听ScrollView的滚动和缩放事件     82

4.3.3  使用TableView展示多页内容     83

4.3.4  触摸TableView里的菜单来滚动TableView   86

4.4  扩展控件     87

4.4.1  滑动条控件ControlSlider  87

4.4.2  开关控件ControlSwitch  90

4.4.3  取色器控件ControlColourPicker  92

4.4.4  电位计控件ControlPotentiometer  94

4.4.5  步进器控件ControlStepper  95

4.4.6  按钮控件ControlButton  96

4.4.7  Scale9Sprite  99

4.5  使用编辑框制作用户登录界面     100

第5章  Cocos2d-x动作     105

5.1  动作分类     105

5.2  瞬时动作     106

5.2.1  使用FlipX/FlipY实现X/Y翻转     106

5.2.2  使用Hide、Show实现隐藏和显示     108

5.3  延时动作     109

5.3.1  使用MoveTo或者MoveBy实现移动     109

5.3.2  使用RotateTo和RotateBy实现旋转     110

5.3.3  使用JumpTo和JumpBy实现跳跃     113

5.3.4  使用ScaleTo和ScaleBy实现缩放     114

5.3.5  使用SkewTo和SkewBy实现倾斜变形     115

5.3.6  使用CardinalSplineBy和CardinalSplineTo实现曲线运动     117

5.3.7  使用FadeIn和FadeOut实现渐隐渐出     119

5.4  联合动作     120

5.4.1  按先后顺序执行动作     120

5.4.2  同时执行动作     121

5.4.3  逆向执行动作     122

5.4.4  多次重复执行动作     123

5.4.5  延时执行动作     124

第6章  音频处理     125

6.1  音频处理类SimpleAudioEngine  125

6.2  添加控制背景音乐     126

6.2.1  播放背景音乐并调整音量     126

6.2.2  停止播放背景音乐     128

6.2.3  暂停播放背景音乐     128

6.2.4  继续播放背景音乐     128

6.3  添加控制音乐效果     129

6.3.1  播放音乐     129

6.3.2  停止播放音乐     131

6.3.3  暂停播放音乐     131

6.3.4  继续播放音乐     131

6.3.5  停止、暂停、继续播放所有音乐     132

6.4  Cocos2d-x支持的音频格式     133

第7章  Cocos2d-x瓷砖地图     135

7.1  什么是瓷砖地图     135

7.2  使用Tiled制作瓷砖地图     137

7.2.1  安装Tiled  137

7.2.2  制作地图     138

7.3  在游戏中使用瓷砖地图     140

7.3.1  使用TMXTiledMap把瓷砖地图加载到游戏中     140

7.3.2  拖曳TMX地图     141

7.3.3  在TMX地图中添加并移动精灵     142

7.3.4  读写TMX地图中的图层和瓷砖     143

第8章  Cocos2d-x中的事件机制     146

8.1  事件和事件调度     147

8.2  触摸事件     149

8.2.1  单点触摸事件的类和方法     149

8.2.2  单击屏幕移动精灵     150

8.2.3  拖动精灵移动     152

8.2.4  修改监听器的优先级     154

8.2.5  多点触摸事件     156

8.2.6  使用多点触摸实现缩放     157

8.3  鼠标事件     159

8.4  键盘事件     159

8.4.1  键盘事件介绍     159

8.4.2  实例:把键盘输入内容显示在屏幕中     160

8.5  加速计     161

8.5.1  加速计介绍     161

8.5.2  实例:利用加速计控制小球移动     162

第9章  Cocos2d-x本地数据存储     165

9.1  使用UserDefault存储数据     165

9.1.1  UserDefault介绍     165

9.1.2  使用UserDefault存储修改数据     167

9.2  文件     169

9.2.1  文件处理类FileUtils  169

9.2.2  判断文件是否存在     169

9.2.3  设置文件别名     170

9.2.4  获取文件完整路径     172

9.2.5  设置文件搜索路径     174

9.2.6  根据分辨率调用不同的资源     175

9.2.7  向文件中写入数据     176

9.2.8  从文件中读取数据     179

9.2.9  把数据写入plist文件     180

9.2.10  从plist文件读取数据     182

9.3  SQLite存储     183

9.3.1  SQLite简介     183

9.3.2  可视化管理工具SQLiteStudio  185

9.3.3  使用SQLiteStudio添加数据库     186

9.3.4  使用SQLiteStudio添加表和数据     188

9.3.5  使用C语言接口操作SQLite数据库     190

9.3.6  不使用回调查询SQLite数据库     194

第10章  网络编程     197

10.1  HTTP实现网络通信     198

10.1.1  HTTP通信简介及常用类     198

10.1.2  GET方式通信     200

10.1.3  POST方式通信     203

10.2  Socket实现网络通信     204

10.2.1  Socket简介     204

10.2.2  在Cocos2d-x中使用Socket  205

10.3  WebSocket实现网络通信     209

10.3.1  WebSocket简介     209

10.3.2  在Cocos2d-x中使用WebSocket  210

第11章  物理引擎Box2D   215

11.1  Box2D简介     216

11.2  创建Box2D的HelloWorld项目     217

11.2.1  创建一个世界     217

11.2.2  创建一个地面物体     217

11.2.3  创建一个动态物体     219

11.2.4  模拟(Box2D的)世界     219

11.2.5  清理工作     221

11.3  世界b2World  221

11.3.1  b2World简介     221

11.3.2  世界常用功能     222

11.4  物体b2Body  225

11.4.1  b2Body简介     225

11.4.2  物体定义     226

11.4.3  创建物体     228

11.4.4  使用物体     229

11.5  固定装置b2FixtureDef 231

11.5.1  b2FixtureDef简介     231

11.5.2  创建b2FixtureDef 231

11.6  关节     234

11.6.1  关节简介     234

11.6.2  关节定义     235

11.6.3  创建关节     235

11.6.4  关节类型和使用关节     236

11.7  接触     242

11.7.1  接触简介     242

11.7.2  接触监听器     243

11.7.3  接触筛选     244

第12章  纹理和动画     246

12.1  渲染和修改纹理     246

12.1.1  纹理类Texture2D   247

12.1.2  Cocos2d-x支持的纹理格式     249

12.1.3  Cocos2d-x支持的最大纹理尺寸     249

12.1.4  使用RenderTexture保存截屏     250

12.1.5  图片抗锯齿处理方式     251

12.1.6  使用图片缓存     253

12.1.7  制作游戏加载场景     254

12.1.8  使用TexturePacker制作Sprite Sheet  256

12.2  动画     258

12.2.1  帧动画     258

12.2.2  使用帧动画实现英雄打斗     259

12.2.3  Sprite Sheet动画     266

12.2.4  骨骼动画     268

12.2.5  使用CocoStudio制作骨骼动画     269

12.2.6  在项目中调用CocoStudio制作的骨骼动画     273

第13章  使用Cocos2d-x制作2048休闲游戏     275

13.1  准备工作     275

13.2  使用CocoStudio制作UI界面     276

13.3  编写逻辑代码     279

13.3.1  把UI界面添加到游戏界面中     279

13.3.2  添加获取分数控件并设置分数     281

13.3.3  添加数字方块类     281

13.3.4  初始化游戏数据     282

13.3.5  添加按钮功能     284

13.3.6  添加事件监听     285

13.3.7  实现方块上下左右移动     287

13.3.8  添加新的数字块     290

13.3.9  判断游戏是否结束     291

13.3.10  添加游戏介绍界面     293

第14章  使用Cocos2d-x制作水浒卡牌游戏     294

14.1  准备工作     294

14.2  定义游戏数据结构和存储单例     295

14.3  添加登录界面     299

14.4  添加游戏主场景     305

14.5  添加游戏首页     307

14.6  添加英雄卡牌列表界面     311

14.7  添加战斗流程     314

14.8  添加战斗界面     319

14.9  终结     323

附录A  实例代码清单说明     324

附录B  Cocos2d-x 3.X主要版本间的区别     328

精彩节摘

14.7  添加战斗流程

战斗是卡牌游戏的灵魂,有了喜欢的英雄,给英雄装备一套好的装备,这时不拿出来用用多没意思啊!战斗让你的英雄久经沙场,变得更强更伟大。该游戏中的战斗流程是,单击战争菜单,首先进入世界地图,如图14-5所示,单击世界地图上的某个势力范围,进入该势力范围的推图,再单击其中一个推图进入战斗场景。

世界地图通过GameMapLayer实现。在GameMapLayer初始化中,添加一个ScrollView,用来滚动显示隐藏的地图:

ui::ScrollView* dragPanel = ui::ScrollView::create();

设置dragPanel的大小为窗口大小:

Size widgetSize =Director::getInstance()->getWinSize();

dragPanel->setSize(widgetSize);

设置dragPanel的内容大小为640×1920:

 Size backgroundSize = Size(640,1920);

dragPanel->setInnerContainerSize(backgroundSize);

设置位置添加到场景中:

dragPanel->setPosition(ccp((widgetSize.width - backgroundSize.width) / 2, (widgetSize.height - backgroundSize.height) / 2 +
(backgroundSize.height - dragPanel->getContentSize().height) / 2));

 

m_pLayer->addChild(dragPanel);

世界地图是用CocosStudio制作的UI,这里省略详细的制作过程,因为上一个实例已经详细讲解了CocosStudio怎制作UI。我们把UI添加到dragPanel中:

Layout* map_root = dynamic_cast<Layout*>(GUIReader::shareReader()->widgetFromJsonFile("GameMapLayer_1.json"));

dragPanel->addChild(map_root);

然后定义一个数组,代表势力范围的名称:

string str[21] = {"yananfu","shijiachun","shimiao","yezhulin", "changzhou","hunxian","erlongsan","qingzhou","jiangzhou","liangsan","zhujiazhuang","beijing","chengtou","dongpingfu","dongjing","liangsan","jizhou","shuzhou","hangzhou","guanfu"};

通过一个for循环遍历UI地图中的Button,并为Button添加名称和回调函数:

for (unsigned int i = 0; i<20; ++i)

    {

        Button* button = (Button*)(map_root->getChildByTag(i));

button->setTitleFontSize(32);

button->setTitleColor(Color3B(255,0,0));

button->setTitleText(str[i].c_str());

button->addTouchEventListener(this,toucheventselector (GameMapLayer::buttonTouchEvent));

}

在回调函数buttonTouchEvent中,先获取单击Button的tag和现在的等级:

voidGameMapLayer::buttonTouchEvent(Ref *pSender, TouchEventType type)

{

    Size winSize =Director::getInstance()->getWinSize();

    Sprite *bg=Sprite::create("tipbg.png");

    Button* pHome=(Button*)pSender;

int tag=pHome->getTag();

int level=GameData::shareGameData()->mlevel;

switch (type)

    {

case TOUCH_EVENT_BEGAN:

break;

 

case TOUCH_EVENT_MOVED:

break;

 

case TOUCH_EVENT_ENDED:

            ....进行操作....

break;

case TOUCH_EVENT_CANCELED:

break;

 

default:

break;

    }

}

然后在TOUCH_EVENT_ENDED中判断等级是否大于等于tag*5-10,如果是就进入推图场景:

if(level>=tag*5-10)

           {

FightLayer *info=new FightLayer(tag);

addChild(info);

            }

这时,运行程序,单击世界地图中最上面的势力,进入推图场景,如图14-6所示。

作者简介

于浩洋:曾就职于阿里巴巴、人人网,从事多年互联网产品开发工作。守望科技工作室创始人,我博轻游科技有限责任公司CTO,参与主导多款卡牌手游的开发与发行,有丰富的手游开发经验。

媒体评论

手游是个很有前景的行业,同时也是个竞争异常激烈的行业。为了在竞争中立于不败之地,必须有可靠先进的技术和技术人才。此书以Cocos2d-x 3.0为基础,从入门知识到高级进阶,详细讲解了手游开发的十几个大模块,每个大模块又包含了许多小的知识点,是提高技术水平不可多得的一本书。

林顺

触控科技高级技术总监,Cocos2d-js作者

本书是由从业多年的开发者于浩洋所著,多年的互联网巨头从业经验使得作者形成了比较扎实的知识体系。书中对基础知识娓娓道来,同时全书包括多个实例讲解。大量的实例,让所有知识深入浅出,不论你是有从业经验的中级开发者还是初次使用Cocos2d-x的小白用户,本书都是不错的选择。

杨雍

泰然网创始人,Cocos2d-x技术推广总监

前言

记得第一次接触移动互联网是在2008年左右,当时互联网应用相当普及,市场竞争进入红海,绝大多数人认为移动互联将成为下一个增长点,是很大的蓝海,社会将进入3G时代。大到三大运营商和一线互联网公司,小到小公司和个人开发者都想进入移动互联,从3G大蛋糕中分到一块利益。转眼几年过去,正如当时预料的那样,移动互联已经深入人们的生活当中,4G也悄悄来临。在移动互联的发展过程中,苹果公司起到了不可磨灭的作用,因为它发布了能承载移动互联功能的新概念智能手机iPhone。于是乎,诞生了一大批移动应用和移动游戏的开发商和个人开发者。其中以《疯狂的小鸟》为代表的第一批手机游戏进入人们的视线并大获成功,之后手机游戏以比雨后春笋还疯狂很多倍的速度成长起来。各种类型的游戏出现在市场中,例如《我叫MT》《大掌门》《找你妹》及腾讯的天天游戏系列。

在手机游戏快速成长的过程中,手机游戏开发框架也跟着发展起来,其中最著名的就是Cocos2d家族,Cocos2d-iphone、Cocos2d-js、Cocos2d-java等,其中Cocos2d-iphone使用数最多。但是Cocos2d-iphone是用Objective-C开发的,只能用于开发iPhone平台的游戏,如果想发布到Android平台,就要使用另外一种语言,几乎重写所有代码。于是,中国有位叫王哲的“大神”,使用C++重新实现了一遍Cocos2d-iphone的API,使用C++开发的游戏不仅效率高,也能发布到iOS、Android、in、Linux等多个平台,真正实现了编写一次、多平台运行的目的。

Cocos2d-x 3.0系列统一修改了类和接口(比如把类前面的CC去掉),使代码更规范、更美观。3.0系列重写了纹理渲染方式,不再会产生成倍消耗内存的情况,使游戏运行效率更高、更稳定。本书以Cocos2d-x 3.0版本为基础,记录整理了笔者在学习和使用Cocos2d-x中遇到的问题和常用功能,以实践为主,着重提高读者的动手开发能力,让读者从入门手游的菜鸟成为游戏开发界的大神。

本书的主要内容如下。

第1章介绍Cocos2d-x的优缺点和目录结构,本书案例需要的环境搭建、交叉编译以及打包部署。

第2章讲解了Cocos2d-x中常用的数据类型和方法及一些宏定义。

第3章讲解了Cocos2d-x的基本概念,即基础节点Node、相机、导演、场景、布景、精灵。

接着由浅入深,第4章讲解了如何使用Cocos2d-x创建用户界面,如文本、菜单、滚动框等基本控件,以及一些扩展控件,如取色器、计步器、复选框等。

之后笔者用很多篇幅在第5章讲解了使用Cocos2d-x创建动作的方式,因为动作在游戏中是必不可少的重中之重,内容包括移动、跳跃、旋转等简单动作,以及按顺序执行或同时执行的复杂动作。

音乐在游戏中也不可或缺,好的音效给人耳目一新的感觉,本书第6章讲解了使用Cocos2d-x播放、停止、暂停、继续播放背景音乐和音效。

第7章介绍了瓷砖地图相关的内容,包括瓷砖地图的概念、如何制作瓷砖地图,如何在游戏中使用、操作瓷砖地图等。

第8章讲解了Cocos2d-x中的事件机制,包括触摸事件、鼠标事件、键盘事件,以触摸事件为主要内容。智能手机大多数都是触摸屏,要监听用户的触摸行为,然后调用相应的行为动作,Cocos2d-x提供了一套触摸事件机制,并且3.0系统重写了该机制,使监听用户触摸行为更加方便快捷,同时Cocos2d-x还支持多点触摸机制,增加玩家与手机的交互乐趣。

除此之外,进行游戏时还产生很多数据,这些数据有时需要保存下来以便下次使用,所以第9章介绍了多种保存数据的方式,比如UsderDefault、Plist、本地数据库SQLite等。

当开发网络游戏时,客户端要不断地跟服务端进行数据交换,第10章讲解了如何使用HTTP、Sockets、WebSockets进行网络编程。

第11章介绍了物理引擎,它可以使游戏更加接近现实世界,给玩家更真实的体验。

第12章讲解了纹理和动画,介绍了纹理的渲染方式并提供了几个提高渲染效率的方法。动画部分讲解了如何在游戏中播放帧动画、plist动画和骨骼动画。书中还穿插介绍了一些工具的使用方法,比如使用bitmap font generator制作自定义字体,使用Tiled Map Editor制作编辑瓷砖地图,使用SQLiteStudio管理SQLite数据库,使用CocoStudio制作编辑UI、动画、场景等。

第13章讲解了休闲游戏2048的完整开发过程,核心内容包括使用CocoStudio制作UI界面,UI界面与逻辑代码的交互,使用UserDefault存取游戏数据,数字方块移动、合并的逻辑等。

第14章讲解了水浒卡牌游戏的完整开发过程,挑选了其中几个典型的功能进行了详细讲解,包括登录界面、公共菜单、游戏首页、英雄列表、地图、推图和战斗界面等。本章内容对于游戏开发人员具有很高的参考价值。

本书所有实例代码在附录A中有详细说明,读者可到博文视点网站下载,地址:www.broadview.com.cn/23998。

附录B详细介绍了Cocos2d-x 3.X主要版本间的区别,用实例详细说明各个功能点的使用方法。

最后衷心感谢读者的支持,如果有问题或想法可以到博客上留言交流,我的博客是http://blog.watchtech.net。

 

于浩洋

Cocos2d-x实战:C++卷》[1] 系统论述了Cocos2d-x游戏开发理论与实践。全书内容涵盖了Cocos2d-x的核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、数据交换格式、内存管理、性能优化、平台移植、程序代码管理、三大应用商店发布产品等。本书共29章,按内容结构可分为六篇: 第一篇开发基础,即第2章~第8章,内容包括Cocos2d-x简介、环境搭建、字符串、标签、菜单、精灵、场景、层、动作、特效、动画和Cocos2d-x用户事件。 第二篇开发进阶,即第9章~第12章,内容包括游戏音乐与音效、粒子系统、瓦片地图和物理引擎。 第三篇数据与网络,即第13章~第17章,内容包括Cocos2d-x中使用的数据容器类、数据持久化、数据交换格式、基于HTTP网络通信和基于Node.js的Socket.IO网络通信。 第四篇设计与优化,即第18章~第20章,内容包括Cocos2d-x中的常用设计模式、Cocos2d-x中的内存管理和性能优化。 第五篇平台移植,即第21章~第23章,内容包括从Win32到Android平台的移植、从Win32到WindowsPhone8平台的移植和从Win32到iOS平台的移植。 第六篇开发实战,即第24章~第29章,内容包括使用Git管理程序代码和多个项目实战——迷失航线手机游戏项目开发、为迷失航线游戏添加广告、发布放到Googleplay应用商店、发布放到WindowsPhone应用商店和发布放到苹果AppStore。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值