cocos2d简介
cocos2d国人维护开发的游戏引擎,比较适合做2d游戏
优势:跨平台,免费,开源
主要版本:cocos2d-iPhone,Cocos2d-X,Cocos2d-HTML5,JavaScript bindings for Cocos2d-x
cocos2d-x: X 表示两个意思,意识c++文件CXX,“X” 标志该项目是由c++ 编写的,另一个意思是交叉,这个开源项目的目标是让用户创建跨平台的代码.
2d-x广泛的应用:我叫MT,龙之力量,大掌门,神仙道等等
开发环境集成工具
刚开始环境配置会很复杂,还好有cocosStudio 的windows安装包(集成了开发环境cocos2dx 3.10 版本)
资源难找,在此摆上网盘链接,与各位分享
链接:https://pan.baidu.com/s/1jWsNOZySCK3iF7qXaHYGRw
提取码:jrv8
cocos2d 主要功能:
- 流程控制:可以非常容易的管理不同场景之间的流程控制,直接使用导演(Diretcor) 对象,就可以进行场景的跳转
- 精灵(sprite,子图):引擎实现了精灵,直接使用引擎的方法就可以创建精灵
- 动作(Action):引擎实现了很多动作,移动,旋转,缩放等,动作还可以组合
- 特效(effects):引擎实现了很多特效,包括波浪(Wave),旋转(twirl) 和镜头
- 平面地图(tiled maps):支持矩形和六边形平面地图
- 转换(transition):支持从一个场景移动到另外的场景,可以添加动画,并且有30多种转场动画
- GUI:实现了很多的GUI控件,CCTableView,CCScrollView等
- 文本渲染(text rendering):支持标签和html标签动作
- 基于OPENGL:支持硬件加速
几个基本概念:
Director: 导演,权力最大,可以选择场景的切换,游戏的暂停,继续和停止,转换坐标,设置动画帧速率以及系统信息显示
Scene: 场景,类似话剧中的一幕(背景基本不变化,或者是说周围环境不会变化)
如:开场,过长,串场和游戏结束等视频或文字,主要用于进行游戏功能选择,游戏参数设置等选项场景类和游戏过程的游戏主场景.
Layer: 布景层,使用布景层可以将游戏界面中的各种元素分组管理.
如:将地图由地图布景层管理:将UI元素用UI布景层管理,将角色元素用角色布景层管理.一般会将布景层设置为透明,这样就不会干扰其他布景层中元素的显示.
Sprite:精灵(子图,但是感觉精灵更文雅,但是不太准确),拥有自己的行为,可以移动,旋转
Node:节点,场景上的所有元素都是节点之间关联起来的,形成一棵树,节点只是占据一个位置,和其他节点的位置关系,没有自己的行为,也没有形状, 其他的大多数类都是Node 的子类,拥有自己的行为,以及绘制方法
demo工程搭建:
1: 安装cocosstudio ,此处略
2: 打开cocostudio,文件->新建项目->勾选源代码,c++ ->确定
- 项目->发布与打包->发布为visualstudio 工程->确定(弹出提示是否使用vs 打开工程)
- 进入vs 运行(可能需要十分钟编译,很多cpp文件,之后启动,则很快了)
- 启动成功
工程目录结构解读:
cocos2d-x基本框架核心文件:
main.h/main.cpp 启动类
AppDelegate.h/Appdelegate.cpp
HelloWorldScene.h/HelloWorldScene.cpp 场景类,主要代码也是在此类中编写
其他用户自定义源文件
1. main.h/main.cpp
- 此文件在工程的proj.win32目录下
- 是cocos2d-x 程序的入口
- 实例花了AppDelegate 类的app 对象,并在Application:: getInstance()->run() 方法中启动了Applegate类的ApplicationDidFinishLaunching() 方法
main.cpp 代码:
#include "main.h"
#include "AppDelegate.h"
#include "cocos2d.h"
USING_NS_CC;
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// create the application instance
AppDelegate app; // 创建app对象
return Application::getInstance()->run();
}
Application::getInstance()->run()代码:
int Application::run()
{
PVRFrameEnableControlWindow(false);
// Main message loop:
LARGE_INTEGER nLast;<