(4)Cocos2d-x的Helloworld项目工程架构解析
来源:互联网 发布:手机消息提醒软件 编辑:程序博客网 时间:2024/05/22 01:58
一.基础知识:C++的类
可能大多数写java的童鞋会很头疼,因为C++类写在两个文件里,一个是.h文件是类的声明,而.cpp文件则是类的定义。在.h头文件里声明类和类的各个方法,然后在.cpp源文件中再定义它的实现方式。个人就把他们理解成是目录和文章的关系。
二.工程架构
(一)在文件夹中cocos2dx 的文件结构
Class:Cocos2d-x的C++类文件,游戏的入口类为AppDelegate.cpp ,其余文件根据项目情况安排。
Debug.win32:包括编译生成的OBJ文件、编译日志文件等
Resoures:资源文件夹,放置声音、图片等文件。
win32:win32平台的入口文件main.cpp等。
(题外话:在这里大家可能看到了有两个入口cpp,一个是AppDelegate.cpp,另一个是main.cpp,我可以很负责的告诉大家C++所有的工程都是从main开始启动的,在cocos2d-x中,main.cpp是整个程序窗口的启动类,而AppDelegate.cpp则是Cocos2d-x项目的入口类。)
(二)在VS开发工具中cocos2dx的架构
在2.1.3版本的工程中新建一个项目会包含以上几个文件夹,下面简单的说下这几个文件夹里分别是存放什么样的文件
1.include文件夹:主要存放类的头文件(.h文件)
2.resource文件夹:主要存放项目的资源文件,如声音、图片等
3.source文件夹:主要存放类的源文件(.cpp文件)
4.外部依赖项:编译时会用到的外部加载的类的头文件,这里存放的大部分都是cocos2d-x引擎自带的头文件(在创建的时候自动加载了,不需要手动添加)
三.项目中部分代码讲解
1.main
/*main.cpp*/
// 创建应用程序实例 AppDelegate app; CCEGLView* eglView = CCEGLView::sharedOpenGLView(); eglView->setFrameSize(480, 320);//设置程序屏幕的大小 eglView->setViewName("MyCocos2d-x"); //这句在cocos2d-x中默认项目中是没有的,用途在于设置窗口的名字,eglView是CCEGLView类的指针,指针->函数,表示调用CCEGLView类的setViewName方法。
int ret = CCApplication::sharedApplication()->run();2.AppDelegate
/*AppDelegate.cpp*/
bool AppDelegate::applicationDidFinishLaunching(){ //初始化导演类 CCDirector *pDirector = CCDirector::sharedDirector(); pDirector->setOpenGLView(CCEGLView::sharedOpenGLView()); // 设置是否显示帧数,true为显示,false为不显示 pDirector->setDisplayStats(true); // 设置帧数。默认值是1.0/60 pDirector->setAnimationInterval(1.0 / 60); // 创建一个场景。这是一个生成自动释放对象,pScene指向了HelloWorld场景,在屏幕中会从HelloWorld的场景开始
CCScene *pScene = HelloWorld::scene(); // 运行 pDirector->runWithScene(pScene); return true;}
3.HelloWorldScene
#include "HelloWorldScene.h" //包含HelloWorldScene.h头文件,在C++项目中,cpp要用到的类都必须在开始的时候includeusing namespace cocos2d; //使用cocos2d的命名空间,漏了这一句的话,之后很多cocos2d中的变量都会提示你未定义或找不到对象CCScene* HelloWorld::scene() //定义一个HelloWorld指针指向scene方法{ CCScene * scene = NULL; //先把场景scene设为null do { // 创建一个场景,场景是自动释放资源的对象 scene = CCScene::create(); CC_BREAK_IF(! scene); // 创建HelloWorld层,并将其传给layer指针,层是自动释放资源的对象 HelloWorld *layer = HelloWorld::create(); CC_BREAK_IF(! layer); // 将HelloWorld层加入场景scene中,在cocos2dx中使用addChild方法 scene->addChild(layer); } while (0); // return the scene return scene;}// CCLayer类的init函数在创建布景层时被调用bool HelloWorld::init(){ bool bRet = false; do { ////////////////////////////////////////////////////////////////////////// // super init first ////////////////////////////////////////////////////////////////////////// CC_BREAK_IF(! CCLayer::init()); ////////////////////////////////////////////////////////////////////////// // add your codes below... ////////////////////////////////////////////////////////////////////////// // 1. Add a menu item with "X" image, which is clicked to quit the program. // 创建一个关闭按钮 CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png",//正常状态的图片 "CloseSelected.png", //按下时的图片 this, menu_selector(HelloWorld::menuCloseCallback)); CC_BREAK_IF(! pCloseItem); // 设置按钮pCloseItem的坐标,并用导演类的shareDirector方法获得屏幕的宽,若要获得高则,CCDirector::sharedDirector()->getWinSize().height pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20)); // 创建一个菜单类的指针,并把关闭按钮放进菜单中 CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); //菜单的坐标为原点 CC_BREAK_IF(! pMenu); // 将菜单加入到HelloWorld层容器中,并置于第一层中,层越大则在屏幕中越慢绘制 this->addChild(pMenu, 1); //创建一个文字标签,“显示的字符,字体,字号” CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24); CC_BREAK_IF(! pLabel); // 设置文字标签的坐标 CCSize size = CCDirector::sharedDirector()->getWinSize(); pLabel->setPosition(ccp(size.width / 2, size.height - 50)); // 将文字坐标加入到HelloWorld层中 this->addChild(pLabel, 1); // 定义一个精灵用于显示HelloWorld.png图片 CCSprite* pSprite = CCSprite::create("HelloWorld.png"); CC_BREAK_IF(! pSprite); // 设置精灵的位置,位置都是用cpp(x,y)表示的,如果设置为原点可以CCPointZero pSprite->setPosition(ccp(size.width/2, size.height/2)); // 将精灵加入到HelloWorld层中,并处于第0层的位置,比文字标签要低层,所以先绘制,也就是说文字会在这张图片的上面. this->addChild(pSprite, 0); bRet = true; } while (0); return bRet;}
/*事件响应函数*/void HelloWorld::menuCloseCallback(CCObject* pSender){ // 按下了关闭按钮后,程序退出 CCDirector::sharedDirector()->end();}
- (4)Cocos2d-x的Helloworld项目工程架构解析
- Cocos2d-3.x的HelloWorld工程分析(一)
- Cocos2d-3.x版的HelloWorld工程分析 (二)
- Cocos2d-x版的HelloWorld工程分析
- Cocos2d-x版的HelloWorld工程分析
- Cocos2d-x HelloWorld的全面解析
- [cocos2d-x] -- 新建HelloWorld工程
- [cocos2d-x] -- 新建HelloWorld工程 .
- Cocos2d-x 3.1 HelloWorld解析
- cocos2d-x引擎的安装 以及第一个HelloWorld工程
- [cocos2d-x 学习] 初探 HelloWorld 工程代码
- 二.Cocos2d-x创建HelloWorld工程
- Cocos2d-x Lua工程架构
- 我的Cocos2d-x学习笔记(三)游戏逻辑架构与HelloWorld分析
- [cocos2d-x菜鸟学习记录]解析示例helloWorld(上)
- [cocos2d-x菜鸟学习记录]解析示例helloWorld(下)
- (3)Cocos2d-x新建第一个项目之HelloWorld
- 1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg
- 大白话解析模拟退火算法
- 我的设计模式学习之路7(模板模式)
- java regex group 用法
- Django_book 第三章
- 文件格式参考网址
- (4)Cocos2d-x的Helloworld项目工程架构解析
- C++ - static_cast | reinterpret_cast | dynamic_cast
- 用chroot对付磁盘空间不足的情况
- LUANET实例化C# 类
- PHP 观察者模式
- 创建的模态对话框无法响应鼠标,只响应回车
- 数据结构(C语言版)
- 递归翻转栈&递归栈排序
- Session对象