课程表

入门与环境搭建

简单控件的使用

视图控制

调用、存储、网络和动画

其他控件的使用

工具箱
速查手册

CrossApp项目结构及入口

当前位置:免费教程 » 移动开发 » CrossApp

我创建一个名为HelloCrossApp的工程,那么在引擎的根目录的projects文件夹下,将会出现一个名为HelloCrossApp的工程目录。我们打开这个目录可见下图的的结构:

CrossApp项目结构

HelloCrossApp的工程目录结构
Classes存放我们编写的C++代码
proj.android android平台工程配置
proj.ios  ios平台工程配置(需要在MacOS下使用xode)
proj.mac  mac平台工程配置(需要在MacOS下使用xode)
proj.win32 win32平台工程配置(用于在win下开发,推荐vs2013)
Resources项目的资源目录(存放:图片、音效、字体等)


大家打开各自平台使用的工程配置,我以win下vs2013为例子截图

win下vs2013

工程配置结构
HelloCrossApp我们自己的项目
libCocosDenshion声音库
libCrossAppCrossApp引擎库
libExtensions使用的第三方的库(json、sqlit3、network、websockets等)


打开HelloCrossApp下的Classes目录,看到如下结构:

HelloCrossApp下的Classes目录

Classes目录结构
AppDelegate 目入口
FirstViewController项目的CAViewController
RootWindow项目启动的CAWindow


我在这里引用API给出的CAWindow和CAViewController解释

什么是CAWindow?

CAWindow主要的作用是作为所有view的载体、容器,分发触摸消息,协同viewController完成对应用程序的管理。应用程序通常只有一个window,即使存在多个window,也只能有一个window能够接收屏幕事件。应用程序启动时创建这个窗口,并往窗口中加入一或多个视图并显示出来,之后我们很少需要再次引用它。CAWindow是所有CAView的根,管理和协调应用程序的显示。

什么是CAViewController?

CAViewController作为CAView的管理器,其最基本的功能就是控制视图的切换。视图控制器在MVC设计模式中扮演控制层(C)的角色, CAViewController的作用就是管理与之关联的view,同时与其他CAViewController相互通信和协调。

我们在这里详细讲一下AppDelegate 的代码,打开Application.h文件,我在代码上标注了中文的注释,帮助大家理解。

  1. #ifndef _APP_DELEGATE_H_
  2. #define _APP_DELEGATE_H_
  3. #include "CrossApp.h"
  4. /**
  5. @brief The CrossApp Application.
  6. The reason for implement as private inheritance is to hide some interface call by CAApplication.
  7. */
  8. class AppDelegate : private CrossApp::CCApplication
  9. {
  10. public:
  11. AppDelegate();
  12. virtual ~AppDelegate();
  13. /**
  14. @brief Implement CAApplication and CCScene init code here.
  15. @return true Initialize success, app continue.
  16. @return false Initialize failed, app terminate.
  17. */
  18. /*
  19. 这个函数用于实现CAApplication和CAWindow(CCScene应该为注释的错误,以后版本会修正)的初始化
  20. 如果返回true,初始化成功,程序正常运行
  21. 如果返回false,初始化失败,程序终止运行
  22. */
  23. virtual bool applicationDidFinishLaunching();
  24. /*
  25. @brief The function be called when the application enter background
  26. @param the pointer of the application
  27. */
  28. /*
  29. 当程序进入后台运行时,此函数会被调用(例如,电话)
  30. */
  31. virtual void applicationDidEnterBackground();
  32. /*
  33. @brief The function be called when the application enter foreground
  34. @param the pointer of the application
  35. */
  36. /*
  37. 当程序从后台切回被激活时调用此函数
  38. */
  39. virtual void applicationWillEnterForeground();
  40. };
  41. #endif // _APP_DELEGATE_H_


我们再来看看Application.cpp里又都做了什么

  1. #include "AppDelegate.h"
  2. #include "RootWindow.h"
  3. USING_NS_CC;
  4. AppDelegate::AppDelegate()
  5. {
  6. }
  7. AppDelegate::~AppDelegate()
  8. {
  9. }
  10. bool AppDelegate::applicationDidFinishLaunching()
  11. {
  12. // initialize director
  13. //初始化direction
  14. CAApplication* pDirector = CAApplication::getApplication();
  15. //初始化窗口
  16. CCEGLView* pEGLView = CCEGLView::sharedOpenGLView();
  17. pDirector->setOpenGLView(pEGLView);
  18. // run
  19. //启动 RootWindow入口
  20. pDirector->runWindow(RootWindow::create());
  21. return true;
  22. }
  23. // This function will be called when the app is inactive. When comes a phone call,it's be invoked too
  24. void AppDelegate::applicationDidEnterBackground()
  25. {
  26. //暂停动画
  27. CAApplication::getApplication()->stopAnimation();
  28. // if you use SimpleAudioEngine, it must be pause
  29. //暂停音效,如果你有使用音效,希望程序切到后台音效停止,请解下面代码的注释
  30. // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
  31. }
  32. // this function will be called when the app is active again
  33. void AppDelegate::applicationWillEnterForeground()
  34. {
  35. //回复动画
  36. CAApplication::getApplication()->startAnimation();
  37. // if you use SimpleAudioEngine, it must resume here
  38. //回复音效,如果你有使用音效,希望程序切到激活状态音效恢复,请解下面代码的注释
  39. // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
  40. }

RootWindow比较简单,我这里就不想详述,我来看一看FirstViewController都做了什么?
首先打开FirstViewController.h文件

  1. //加载函数 一般做初始化UI和逻辑
  2. void viewDidLoad();
  3. //卸载函数 一般做移除和释放
  4. void viewDidUnload();

再来看看FirstViewController.cpp的 vievDidLoad();里的代码:

  1. void FirstViewController::viewDidLoad()
  2. {
  3. // Do any additional setup after loading the view from its nib.
  4. DRect winRect = this->getView()->getBounds(); //获得屏幕的Bounds(Bounds不收缩放影响)
  5. //加载一张图片
  6. CAImageView* imageView = CAImageView::createWithImage(CAImage::create("HelloWorld.png"));
  7. //设置图片的Frame显示大小(Frame的值缩放后会被改变)
  8. imageView->setFrame(winRect);
  9. //将图片添加的到屏幕上面(如果不添加,那么这个ui将不会被渲染,内存也会在下一个loop时被释放)
  10. this->getView()->addSubview(imageView);
  11. //设置一个文本
  12. CALabel* label = CALabel::createWithCenter(DRect(winRect.size.width*0.5, winRect.size.height*0.5-270, winRect.size.width, 200));
  13. //文本水平方向中间对其
  14. label->setTextAlignment(CATextAlignmentCenter);
  15. //文本竖直方向中间对其
  16. label->setVerticalTextAlignmet(CAVerticalTextAlignmentCenter);
  17. //设置字体大小(CROSSAPP_ADPTATION_RATIO是用于适配的系数)
  18. label->setFontSize(72 * CROSSAPP_ADPTATION_RATIO);
  19. //设置文本内容
  20. label->setText("Hello World!");
  21. //设置文本颜色
  22. label->setColor(CAColor_white);
  23. //添加到屏幕并设置z轴
  24. this->getView()->insertSubview(label, 1);
  25. }
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号