尽量避免使用UI,因为要适配IOS、ANDROID、WinPhone等各种平台 => 新的一个适配各种平台,减小移植难度的游戏引擎Cocos2D-X
Cocos2D-X 核心主要是使用C++来写的,外围有其他的代码,比如OC、Android、C#
github下载Cocos2D-X
1、在window操作系统下搭建开发环境,新版本的Cocos2D-X已经没有.bat文件,可以从
http://download.csdn.net/detail/joejames/7331707下载一个,配置好visual studio的cocos2dx创建工程插件
2、也可以参见目录下的README.md配置path,然后用脚本创建工程
很多游戏的一些更新包主要使用lua脚本要实现,这样替换更加方便,维护起来也方便
AppDelegate.h和.cpp文件:项目中程序的入口文件,类似于main函数,在IOS就是程序的入口文件
bool AppDelegate::applicationDidFinishLaunching() 程序启动后将调用这个方法
void AppDelegate::applicationDidEnterBackground() 游戏将要进入后台调用这个方法
void AppDelegate::applicationWillEnterForeground() 游戏即将进入前台调用这个方法
CC里一般名字有shared的一般都是使用单例模式,例如下面的导演类
// initialize director
CCDirector *pDirector = CCDirector::sharedDirector();
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
// 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 / 60);
// create a scene. it's an autorelease object
CCScene *pScene = HelloWorld::scene();
// run
pDirector->runWithScene(pScene);
return true;
游戏元素:任何可以呈现出来的元素,例如 场景、层、精灵
CCScene *scene = CCScene::create();
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
addChild方法:把一个游戏元素放到另一个游戏元之中,只有把一个游戏元素放置到其他已经呈现出来的游戏元素中,它才会呈现出来。
CCDirector运行了scene ,scene 上的layer 就会显示出来
virtual bool init(); 初始化方法:
//(1) 对父类进行初始化
if ( !CCLayer::init() )
{
return false;
}
//(2) 创建菜单并添加到层
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);
//(3) 创建"Hello World"标签并添加到层中
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition(ccp(size.width / 2, size.height - 50));
this->addChild(pLabel, 1);
//(4) 创建显示“HelloWorld.png”的精灵并添加到层中
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
pSprite->setPosition(ccp(size.width/2, size.height/2));
this->addChild(pSprite, 0);
bRet = true;