1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg
1
游戏逻辑架构
具体介绍
|
A |
|
B sceneàaddChild(layer); layeràaddChild(sprite); |
2
项目创建命令:
|
A E:\Installed\cocos2d-x-2.2.3\tools\project-creator> |
|
B python create_project.py -project MyCocos2dx -package com.toto.mycocos01 -language cpp |
|
C -project MyCocos2dx工程名 -package com.toto.mycocos01 -language cpp |
|
D |
3
简单介绍
|
1 创建了一个cocos2dx项目之后,打开项目之后,会有例如以下项目结构 展开libcocos2d,找到cocos2d.cpp,双击打开此cpp文件,内容例如以下: #include NS_CC_BEGIN const { return } NS_CC_END 截图例如以下: 分析: A B |
|
2 |
|
程序入口是:main.cpp |
|
#include #include #include USING_NS_CC; int HINSTANCE LPTSTR int { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // create the application instance AppDelegate CCEGLView* eglView->setViewName("MyCocos2dx"); eglView->setFrameSize(480, return } |
|
进入run函数, |
|
int { PVRFrameEnableControlWindow(false); // Main message loop: MSG LARGE_INTEGER LARGE_INTEGER LARGE_INTEGER QueryPerformanceFrequency(&nFreq); QueryPerformanceCounter(&nLast); // Initialize instance and cocos2d. if (!applicationDidFinishLaunching()) { return 0; } CCEGLView* pMainWnd->centerWindow(); ShowWindow(pMainWnd->getHWnd(), while (1) { if (! { // Get current time tick. QueryPerformanceCounter(&nNow); // If it's the time to draw next frame, draw it, else sleep a while. if (nNow.QuadPart { nLast.QuadPart CCDirector::sharedDirector()->mainLoop(); } else { Sleep(0); } continue; } if (WM_QUIT { // Quit message loop. break; } // Deal with windows message. if (! { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) } |
|
程序的入口:applicationDidFinishLaunching() |
|
AppDelegate.cpp bool // initialize director CCDirector* CCEGLView* pDirector->setOpenGLView(pEGLView); // turn on display FPS pDirector->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this pDirector->setAnimationInterval(1.0 // create a scene. it's an autorelease object CCScene *pScene // run pDirector->runWithScene(pScene); return } 截图: |
|
HelloWorldScene.h |
|
#ifndef #define #include class { public: // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone virtual // there's no 'id' in cpp, so we recommend returning the class instance pointer static // a selector callback void // implement the "static node()" method manually CREATE_FUNC(HelloWorld); }; #endif |
|
HelloWorldScene.cpp |
|
#include USING_NS_CC; CCScene* { // 'scene' is an autorelease object CCScene *scene // 'layer' is an autorelease object HelloWorld *layer // add layer as a child to scene scene->addChild(layer); //return the scene return } // on "init" you need to initialize your instance bool { ////////////////////////////// // 1. super init first if ( !CCLayer::init() { return } CCSize CCPoint ///////////////////////////// // 2. add a menu item with "X" image, which is clicked to quit the program // // add a "close" icon to exit the progress. it's an autorelease object CCMenuItemImage *pCloseItem "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); pCloseItem->setPosition(ccp(origin.x origin.y // create menu, it's an autorelease object CCMenu* pMenu->setPosition(CCPointZero); this->addChild(pMenu, ///////////////////////////// // 3. add your codes below... // add a label shows "Hello World" // create and initialize a label CCLabelTTF* // position the label on the center of the screen pLabel->setPosition(ccp(origin.x origin.y // add the label as a child to this layer this->addChild(pLabel, // add "HelloWorld" splash screen" CCSprite* // position the sprite on the center of the screen pSprite->setPosition(ccp(visibleSize.width/2 // add the sprite as a child to this layer this->addChild(pSprite, return } void { #if (CC_TARGET_PLATFORM CCMessageBox("You #else CCDirector::sharedDirector()->end(); #if (CC_TARGET_PLATFORM exit(0); #endif #endif } |
|
总结: 1、对于cocos真正的初始化是在init()方法中 2、CCScene中的 3、CCPointZero |
4
(CCApplicationProtocol,CCApplication,AppDelegate)三个类的类关系介绍:
抽出代码详细实现:
长处:屏蔽了平台的差异性,实现跨平台
|
1 #ifndef #define NS_CC_BEGIN enum { kTargetWindows, kTargetLinux, kTargetMacOS, kTargetAndroid, kTargetIphone, kTargetIpad, kTargetBlackBerry, kTargetNaCl, kTargetEmscripten, kTargetTizen, kTargetWinRT, kTargetWP8 }; /** * @addtogroup platform * @{ * @js NA * @lua NA */ class { public: virtual ~CCApplicationProtocol() /** @brief Implement CCDirector and CCScene init code here. @return true Initialize success, app continue. @return false Initialize failed, app terminate. */ virtual /** @brief The function be called when the application enter background @param the pointer of the application */ virtual /** @brief The function be called when the application enter foreground @param the pointer of the application */ virtual /** @brief Callback by CCDirector for limit FPS. @interval The time, expressed in seconds, between current frame and next. */ virtual /** @brief Get current language config @return Current language config */ virtual /** @brief Get target platform */ virtual }; // end of platform group /// @} NS_CC_END #endif |
|
2 |
|
3 |
1 游戏逻辑架构,Cocos2d-x游戏项目创建,HelloWorld项目创建,HelloWorld程序分析,(CCApplicationProtocol,CCApplication,AppDeleg的更多相关文章
- Django 创建web项目之HelloWorld
Django.Flask.Tornado并称为python WEB三大框架.Diango是一个开源的web应用框架,具有开发速度快的特点.同时因为过度封装,具有性能低的特点. 创建Django项目,启 ...
- 四、IntelliJ IDEA 之 HelloWorld 项目创建及相关配置文件介绍
咱们通过创建一个 Static Web 项目大致了解了 IntelliJ IDEA 的使用界面,接下来,趁着这个热乎劲,咱们来创建第一个 Java 项目“HelloWorld”,进入如下界面: 如上图 ...
- 关于eclipse创建Maven项目创建的问题
1.问题: 为什么Maven Update Project JDK变回1.5 解释:官方文档 The Compiler Plugin is used to compile the sources of ...
- tfs中如何创建团队项目及如何操作团队项目
创建团队项目集合 tfs server管理控制台\团队项目集合页面.选择'创建集合'链接,按向导即可创建项目集合. 创建团队项目 创建好团队项目集合后,就要开始创建团队项目了. 进入vs,连接上tfs ...
- 分模块创建maven项目(一)
maven是一个项目构建和管理的工具. 我们可以通过maven仓库可以实现管理构建(主要是JAR还包括:WAR,ZIP,POM等等). 我们可以通过maven插件可以实现编译源代.产生Javadoc文 ...
- IOS5基础教程之一-----如何创建XCode项目
一.IOS的基础知识 1.只有一个应用程序正在运行.在IOS上,每一段时间内只能激活一个应用程序并在屏幕上显示. 2.只有一个窗口.只允许应用程序操作的一个窗口. 3.访问受限.只能在IOS为应用程序 ...
- m2eclipse简单使用,创建Maven项目 ,运行mvn命令(转)
前面介绍了如何安装m2eclipse,现在,我们使用m2ecilpse导入Hello World项目. 选择菜单项File,然后选择Import,我们会看到一个Import对话框,在该对话框中选择Ge ...
- .Net Core .Net Core V1.0 创建MVC项目
.Net Core V1.0 创建MVC项目 创建MVC项目有两种方式: 一.创建Web项目:(有太多没用的东西要去删太麻烦) 2.项目目录结构: 此种方法要注意的是,会创建好多个json文件,下面就 ...
- Django 从0开始创建一个项目
title: Django 从0开始创建一个项目 tags: Django --- Django 从0开始创建一个项目 创建Django工程及配置 创建工程:django-admin starproj ...
随机推荐
- java匿名内部类,多态,接口练习
1多态以及接口调用方法: public class Interface { public static void main(String[] args) { Al x = new Al(); jian ...
- Java实现将指定目录内的指定类型的文件归类
这两天在学Java IO流,正好让我产生了将自己的电子书归类的打算,说做就做,Why not?看着自己所学所用能解决生活中的实际问题,是不是非常有成就感,那是必须的! package DepthSea ...
- 设置root远程连接ubuntu上mysql
1.安装mysql,如果是root用户,直接执行一下命令.如果非root,则需要用sudo命令 a. apt-get install mysql-server b. apt-get isntall m ...
- Android控件TextView的实现原理分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8636153 在前面一个系列的文章中,我们以窗口 ...
- SQL内连接-外连接join,left join,right join,full join
1.创建测试表test1及test2 SQL)); 表已创建. SQL)); 表已创建. ,'name1'); ,'name2'); ,'name3'); ,'name4'); ,'name5'); ...
- Javascript进阶篇——( JavaScript内置对象---下)--Math对象---笔记整理
Math对象使用 Math 的属性和方法: <script type="text/javascript"> var mypi=Math.PI; var myabs=Ma ...
- cookie那些事
本文面向对cookie有基本了解的读者,小白出门左转 设置cookie (HTTP 响应头) Set-Cookie: {name}={value};path={path};domain={doma ...
- JS滚轮事件(mousewheel/DOMMouseScroll)了解
已经没有了小学生时代过目不忘的记忆力了,很多自己折腾的东西.接触的东西,短短1年之后就全然不记得了.比方说,完全记不得获取元素与页面距离的方法(getBoundingClientRect),或者是不记 ...
- iOS 之 cocoapods安装与使用
我们都知道第三方库,一般使用cocoapods管理,cocoapods在我们IOS开发中有着很大的作用. 好了,现在看下它的安装步骤: 1.打开终端,输入 sudo gem install cocoa ...
- C# using垃圾回收详解
简介 定义一个范围,将在此范围之外释放一个或多个对象. 语法 using (Font font1 = new Font("Arial", 10.0f)) { } C# 语言参考 主 ...