cocos2d-x初学笔记01:HelloWorld浅析
来源:互联网 发布:c语言小于 编辑:程序博客网 时间:2024/05/16 01:02
刚刚接触cocos2d-x引擎,有些东西总是看了一段时间后又忘记了,所以找个地方记下来,顺便能够和大家一块交流学习。由于是初学笔记,所以这部分内容不会对引擎功能的实现进行深入研究,只是知道怎么用而已。以后掌握的多了再进行研究分析(我现在是菜鸟一个,也分析不出什么东西来)。
按照国际惯例,首先是HelloWorld浅析。cocos2d-x的安装和环境配置我就不说了,网上都有详细的安装教程。安装时出现错误就上网查,一个一个解决,最后就OK了。成功后会出现官方提供的参考示例项目,我的共12个,其中HelloWorld被改名了,成了HelloCpp。
(注意:我使用的cocos2d-x版本是2.0.4,系统是win7)下载地址
同时,cocos2d-x从1.0升级到2.0之后改动了许多地方,详情参见官方文档
好了,让我们把HelloCpp运行起来,就出现如下图
我们可以看到,HelloCpp运行后显示的界面为:一张背景图,一行“HelloWorld”文字,左下角显示三行设置的数据,右下角是一个关闭按钮,点击关闭程序。接下来我们打开HelloCpp项目代码,来看一下它的结构和运行流程。
由于我们是在Windows系统下运行的,所以main.h/cpp放在了win32文件夹下。main.h文件定义了使用win32平台进行编译的宏和一些Windows编程头文件。
#ifndef __MAIN_H__#define __MAIN_H__//定义了使用win32进行编译的宏#define WIN32_LEAN_AND_MEAN// Windows编程用到的头文件#include <windows.h>#include <tchar.h>// cocos2d-x的C语言头文件#include "CCStdC.h"#endif // __MAIN_H__
然后看一下main.cpp的实现
#include "main.h"#include "../Classes/AppDelegate.h"#include "CCEGLView.h"//using name space cocos2d;的宏表示USING_NS_CC;//WinMain主函数int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ //UNREFERENCED_PARAMETER用于在VC编译器下告知编译器,不必检测变量是否使用的警告 UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // 创建一个cocos2d-x程序实例 AppDelegate app; //创建OpenGL窗体,并设置大小 CCEGLView* eglView = CCEGLView::sharedOpenGLView(); eglView->setFrameSize(2048, 1536); //Windows的分辨率小,所以设置为0.4倍 eglView->setFrameZoomFactor(0.4f); //运行程序实例 return CCApplication::sharedApplication()->run();}
接下来是AppDelegate.h/cpp。AppDelegate.h文件的代码如下
#ifndef _APP_DELEGATE_H_#define _APP_DELEGATE_H_#include "cocos2d.h"//继承自CCApplicationclass AppDelegate : private cocos2d::CCApplication{public: AppDelegate(); virtual ~AppDelegate(); //重载应用程序启动后调用的处理函数 virtual bool applicationDidFinishLaunching(); //重载应用程序转入后台时调用的函数 virtual void applicationDidEnterBackground(); //重载应用程序恢复前台时调用的函数 virtual void applicationWillEnterForeground();};#endif // _APP_DELEGATE_H_
再看 AppDelegate.cpp文件
#include "AppDelegate.h"#include "HelloWorldScene.h"#include "AppMacros.h"USING_NS_CC;AppDelegate::AppDelegate() {}AppDelegate::~AppDelegate() {}//重载应用程序启动后调用的处理函数bool AppDelegate::applicationDidFinishLaunching() { //初始化显示设备和OpenGL窗体 CCDirector* pDirector = CCDirector::sharedDirector(); CCEGLView* pEGLView = CCEGLView::sharedOpenGLView(); //设置显示设备使用建立的OpenGL窗体 pDirector->setOpenGLView(pEGLView); // 设置指定的分辨率 pEGLView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder); //获得窗体的大小CCSize frameSize = pEGLView->getFrameSize(); // 根据窗体框架的高度来选择不同分辨率的资源,如果资源大小不同于指定分辨率的大小,我们要对其进行调整 // 我们用资源高度和指定分辨率的高度的比进行调整 // 这样就能保证资源的高度能够适合设定分辨率的高度 // 如果指定分辨率框架的高度大于mediumResource资源的高度,选择largeResourceif (frameSize.height > mediumResource.size.height){ CCFileUtils::sharedFileUtils()->setResourceDirectory(largeResource.directory); pDirector->setContentScaleFactor(largeResource.size.height/designResolutionSize.height);} // 如果指定分辨率框架的高度大于smallResource资源的高度,选择mediumResource else if (frameSize.height > smallResource.size.height) { CCFileUtils::sharedFileUtils()->setResourceDirectory(mediumResource.directory); pDirector->setContentScaleFactor(mediumResource.size.height/designResolutionSize.height); } // 如果指定分辨率框架的高度大于mediumResource资源的高度,选择smallResourceelse { CCFileUtils::sharedFileUtils()->setResourceDirectory(smallResource.directory); pDirector->setContentScaleFactor(smallResource.size.height/designResolutionSize.height); } // 显示FPS pDirector->setDisplayStats(true); // 设置FPS帧间隔时间 pDirector->setAnimationInterval(1.0 / 60); // 创建场景,即通过HelloWorld的scene()返回的场景实例 CCScene *pScene = HelloWorld::scene(); // 运行这个场景 pDirector->runWithScene(pScene); return true;}//重载应用程序转入后台时调用的函数,如电话打进来void AppDelegate::applicationDidEnterBackground() { CCDirector::sharedDirector()->stopAnimation(); // 如果使用了声音引擎,这里进行暂停设置。否则会影响到通话,因为暂时没用到,所以屏蔽 // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();}//重载应用程序恢复前台时调用的函数void AppDelegate::applicationWillEnterForeground() { CCDirector::sharedDirector()->startAnimation(); //如果使用了声音引擎,这里进行恢复设置 // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();}
最后,介绍下HelloWorld.h/cpp。
#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"//继承自CCLayer,所以HelloWorld是一个布景class HelloWorld : public cocos2d::CCLayer{public: // 布景HelloWorld的初始化方法 virtual bool init(); // 用于返回实例化的场景,在AppDelegate里运行这个场景 static cocos2d::CCScene* scene(); // 菜单回调函数 void menuCloseCallback(CCObject* pSender); // create()的宏表达 CREATE_FUNC(HelloWorld);};#endif // __HELLOWORLD_SCENE_H__
cpp的实现如下
#include "HelloWorldScene.h"#include "AppMacros.h"USING_NS_CC;//返回用于运行的场景实例CCScene* HelloWorld::scene(){ // create()创建的对象是自动销毁的,实例化一个场景 CCScene *scene = CCScene::create(); // create()创建的对象是自动销毁的,实例化一个布景 HelloWorld *layer = HelloWorld::create(); // 将实例化的HelloWorld布景添加到场景中 scene->addChild(layer); // 返回这个场景 return scene;}// 初始化HelloWorld布景实例bool HelloWorld::init(){ ////////////////////////////// // 1.实现父类的init()方法 if ( !CCLayer::init() ) { return false; } CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); ///////////////////////////// // 2. 添加一个菜单,点击退出程序 // 创建一个图标菜单项 CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback)); //设置位置 pCloseItem->setPosition(ccp(origin.x + visibleSize.width - pCloseItem->getContentSize().width/2 , origin.y + pCloseItem->getContentSize().height/2)); // 创建菜单,并且设置位置,将其添加到HelloWorld布景中 CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 1); ///////////////////////////// // 3. 添加背景图片和一行“HelloWorld”文字 //创建一行文字,内容为“HelloWorld” CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", TITLE_FONT_SIZE); //设置显示位置 pLabel->setPosition(ccp(origin.x + visibleSize.width/2, origin.y + visibleSize.height - pLabel->getContentSize().height)); // 加入到HelloWorld布景中 this->addChild(pLabel, 1); // 创建一个精灵,实际上就是一张图片 CCSprite* pSprite = CCSprite::create("HelloWorld.png"); //设置位置 pSprite->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); // 将这个精灵图片添加到HelloWorld布景中 this->addChild(pSprite, 0); return true;}//菜单回调函数,当点击菜单时执行void HelloWorld::menuCloseCallback(CCObject* pSender){ CCDirector::sharedDirector()->end();#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) exit(0);#endif}
好了,现在我们已经简单的看了一下HelloCpp项目的执行过程,并将其各个步骤的作用进行了注释。相信大家能够理解。接下来我会参考着TestCpp项目,讲一下其中常用功能的实现方法,依然是简单介绍,知道怎么用,不对其进行进行深入的研究。
第一次写博客,难免有疏漏和错误的地方,希望大家能够指正教导,有表达不好的地方也望大家海涵。写一点学习笔记和大家交流探讨,有些地方可千万别被我误导了,我也是一个小白。
最后祝愿每一个奋斗在路上的人早日实现梦想!
- cocos2d-x初学笔记01:HelloWorld浅析
- cocos2d-x初学笔记
- 【初学】Xcode下cocos2d-x-2.2.0创建HelloWorld
- Cocos2d-x学习笔记(1)- HelloWorld
- cocos2d-x学习笔记(一)--HelloWorld
- Cocos2d-x学习笔记(一)HelloWorld
- Cocos2d-x学习笔记(二)------HelloWorld
- Cocos2d-x学习笔记-- 深入剖析HelloWorld
- cocos2d 初学笔记-01
- cocos2d-x v3.3之HelloWorld浅析(windows)
- cocos2d-x初学笔记02:一些概念
- cocos2d-x初学笔记03:菜单Menu
- cocos2d-x初学笔记09:进度条Progress
- cocos2d-x初学笔记10:特效Effect
- cocos2d-x初学笔记12:定时器schedule
- cocos2d-x初学笔记13:地图Map
- cocos2d-x初学笔记14:精灵表
- cocos2d-x初学笔记09:进度条Progress
- 12个有趣的C语言面试题
- [LeetCode] Longest Palindromic Substring - O(n)
- Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result reso
- Android display架构分析六-Surface manager介绍
- Vim Improved笔记之Commands For Programmers
- cocos2d-x初学笔记01:HelloWorld浅析
- zigbee学习笔记2----cc2530 IO实验
- Android display架构分析七-Surfaceflinger process流程分析
- _cdecl,_stdcall 区别简介
- 翻译工具
- ubuntu软件源
- android 图片倒影 bitmap与drawable的转换 把图片处理成指定大小 图片圆角处理 dip转换成px
- centos 部署openstack E 问题收集
- 奖别人写好的class文件导入到现有的workspace中。如果有error,原因可能是导入的class不是public的