Cocos2d-X菜单教程:第一部分
2012-05-07 01:29
381 查看
此文的cocos2d版是由泰然论坛的子龙山人翻译..深表感谢..这里是他们的链接 http://article.ityran.com/
这是英文版链接 http://www.iphonegametutorials.com/2010/09/07/cocos2d-menu-tutorial/
1)由于本人实在是懒得离谱,所以从启动Xcode 到成功运行 helloworld 俺就不写了..跟文章中cocos2d的建立方式一样
2)删除helloworld.h和.cpp文件 也是一样的.但是建立
“SceneManager”的时候要注意,建立的文件扩展名是.h和.cpp
小贴士:一定要选对路径!!都扔Classes底下,不然Xcode让你include了,也总是提示“木有找到文件”!!切记!
3)修改SceneManager.h和 SceneManager.cpp里的内容
SceneManager.h
#ifndef menu_test_part1_SceneManager_h
#define menu_test_part1_SceneManager_h
#include "cocos2d.h"
#include "MenuLayer.h"
using namespace cocos2d;
class SceneManager:public CCObject
{
static void goMenu();
static void go(CCLayer* layer);
static CCScene* wrap(CCLayer* layer);
};
#endif
SceneManager.cpp
#include <iostream>
#include "SceneManager.h"
#include "cocos2d.h"
using namespace cocos2d;
void SceneManager::goMenu()
{
CCLayer* layer=MenuLayer::node();
SceneManager::go(layer);
}
void SceneManager::go(CCLayer* layer)
{
CCDirector* director=CCDirector::sharedDirector();
CCScene* newScene=SceneManager::wrap(layer);
if (director->getRunningScene()) //这句话 很有可能写的不对啊 有哪位大侠知道怎么写 告知下...
{
director->replaceScene(newScene);
}
else
{
director->runWithScene(newScene);
}
}
CCScene* SceneManager::wrap(CCLayer* layer)
{
CCScene* newScene=CCScene::node();
newScene->addChild(layer);
return newScene;
}
你可能已经注意到了,我们包含了“MenuLayer.h”文件,然后在“goMenu”方法中使用了MenuLayer。所以,让我们再创建一个类,叫 MenuLayer.h以及它的实现 MenuLayer.cpp
MenuLayer.h如下
#ifndef menu_test_part1_MenuLayer_h
#define menu_test_part1_MenuLayer_h
#include "cocos2d.h"
using namespace cocos2d;
class MenuLayer:public CCLayer
{
public:
virtual bool init();
void onNewGame (CCObject* pSender);
void onCredites (CCObject* pSender);
LAYER_NODE_FUNC(MenuLayer);
};
#endif
MenuLayer.cpp 如下
#include <iostream>
#include "cocos2d.h"
#include "MenuLayer.h"
#include "SceneManager.h"
using namespace cocos2d;
bool MenuLayer::init()
{
if (!CCLayer::init())
{
return false;
}
CCLabelTTF* titleLeft=CCLabelTTF::labelWithString("Menu", "Marker Felt", 48); //创建Label
CCLabelTTF* titleRight=CCLabelTTF::labelWithString("System", "Marker Felt", 48);
CCLabelTTF* titleQuotes=CCLabelTTF::labelWithString("\" ", "Marker Felt", 48);
CCLabelTTF* titleCenterTop=CCLabelTTF::labelWithString("How to build a...", "Marker Felt", 26);
CCLabelTTF* titleCenterBottom=CCLabelTTF::labelWithString("Part 1", "Marker Felt", 48);
CCMenuItemFont* startNew=CCMenuItemFont::itemFromString("New Game", this, menu_selector(MenuLayer::onNewGame)); //创建字符型按钮,注意 menu_selector里面的写法!!! 类名::函数名!!!
CCMenuItemFont* credits=CCMenuItemFont::itemFromString("Credits", this, menu_selector(MenuLayer::onCredites));
CCMenu* menu=CCMenu::menuWithItems(startNew,credits,NULL);
//将两个按钮儿子添加到一个menu爹上,大头儿子小头爸爸不分手
//注意menuWithItem的单复数!!英文是不一样滴,还有千万别忘了NULL
//-----------楼下开始大规模setPosition了-----------
titleCenterTop->setPosition(ccp(160,380));
this->addChild(titleCenterTop);
titleCenterBottom->setPosition(ccp(160,300));
this->addChild(titleCenterBottom);
titleQuotes->setPosition(ccp(160,345));
this->addChild(titleQuotes);
titleLeft->setPosition(ccp(80,345));
this->addChild(titleLeft);
titleRight->setPosition(ccp(220,345));
this->addChild(titleRight);
menu->setPosition(ccp(160,200));
menu->alignItemsVerticallyWithPadding(40.0f);
//上面这句貌似是让menu中心对齐
this->addChild(menu);
//总结,以上这些全是 MenuLayer的node儿子!!!
//这之后,所有的的儿子都加到爹身上了,当运行这个MenuLayer之后,儿子们就可以按位置显示了。
//-----------setPosition end-------------------------
return true;
}
void MenuLayer::onNewGame(cocos2d::CCObject *pSender)
{
SceneManager::goMenu();
//运行SceneManager的 goMenu静态方法
}
void MenuLayer::onCredites(cocos2d::CCObject *pSender)
{
SceneManager::goMenu();
//还是运行goMenu方法
}
//答疑:上面这两个函数目前的主要功能是点了以后都是goMenu...也就是没反应,今后的教程,会进一步的添加对应的功能哦
最后,修改 app delegate(AppDelegate.cpp),包含 SceneManager.h头文件:
把
#include "HelloWorld.h"
修改为
#include "SceneManager.h"
当然,我们还需要修改一些内容。因为所有的“runWithScene”逻辑,现在都被SceneManager
类所替代,因此,把下面的语句:
CCScene *pScene = HelloWorld::scene();
这句话不需要了,删掉,再见吧!!
然后把下面这句,
// run
pDirector->runWithScene(pScene);
替换称
SceneManager::goMenu();
好了!!大功告成了!!编译运行看看吧!
额..屏幕是横屏的 所以现在修改
AppDelegate.cpp
这之中有一句话是,
// sets landscape mode
// pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
把第二句的注释符去掉。然后再编译运行
![](http://my.csdn.net/uploads/201205/07/1336325452_6840.jpg)
额....屏幕反了....大家自己调整 括号里面的参数给调正吧...
另:可以可以自己在AppDelegate.cpp中找到去掉左下角FPS显示的方法..
第一部分就是这些,大家果断拍砖哦
这是英文版链接 http://www.iphonegametutorials.com/2010/09/07/cocos2d-menu-tutorial/
1)由于本人实在是懒得离谱,所以从启动Xcode 到成功运行 helloworld 俺就不写了..跟文章中cocos2d的建立方式一样
2)删除helloworld.h和.cpp文件 也是一样的.但是建立
“SceneManager”的时候要注意,建立的文件扩展名是.h和.cpp
小贴士:一定要选对路径!!都扔Classes底下,不然Xcode让你include了,也总是提示“木有找到文件”!!切记!
3)修改SceneManager.h和 SceneManager.cpp里的内容
SceneManager.h
#ifndef menu_test_part1_SceneManager_h
#define menu_test_part1_SceneManager_h
#include "cocos2d.h"
#include "MenuLayer.h"
using namespace cocos2d;
class SceneManager:public CCObject
{
static void goMenu();
static void go(CCLayer* layer);
static CCScene* wrap(CCLayer* layer);
};
#endif
SceneManager.cpp
#include <iostream>
#include "SceneManager.h"
#include "cocos2d.h"
using namespace cocos2d;
void SceneManager::goMenu()
{
CCLayer* layer=MenuLayer::node();
SceneManager::go(layer);
}
void SceneManager::go(CCLayer* layer)
{
CCDirector* director=CCDirector::sharedDirector();
CCScene* newScene=SceneManager::wrap(layer);
if (director->getRunningScene()) //这句话 很有可能写的不对啊 有哪位大侠知道怎么写 告知下...
{
director->replaceScene(newScene);
}
else
{
director->runWithScene(newScene);
}
}
CCScene* SceneManager::wrap(CCLayer* layer)
{
CCScene* newScene=CCScene::node();
newScene->addChild(layer);
return newScene;
}
你可能已经注意到了,我们包含了“MenuLayer.h”文件,然后在“goMenu”方法中使用了MenuLayer。所以,让我们再创建一个类,叫 MenuLayer.h以及它的实现 MenuLayer.cpp
MenuLayer.h如下
#ifndef menu_test_part1_MenuLayer_h
#define menu_test_part1_MenuLayer_h
#include "cocos2d.h"
using namespace cocos2d;
class MenuLayer:public CCLayer
{
public:
virtual bool init();
void onNewGame (CCObject* pSender);
void onCredites (CCObject* pSender);
LAYER_NODE_FUNC(MenuLayer);
};
#endif
MenuLayer.cpp 如下
#include <iostream>
#include "cocos2d.h"
#include "MenuLayer.h"
#include "SceneManager.h"
using namespace cocos2d;
bool MenuLayer::init()
{
if (!CCLayer::init())
{
return false;
}
CCLabelTTF* titleLeft=CCLabelTTF::labelWithString("Menu", "Marker Felt", 48); //创建Label
CCLabelTTF* titleRight=CCLabelTTF::labelWithString("System", "Marker Felt", 48);
CCLabelTTF* titleQuotes=CCLabelTTF::labelWithString("\" ", "Marker Felt", 48);
CCLabelTTF* titleCenterTop=CCLabelTTF::labelWithString("How to build a...", "Marker Felt", 26);
CCLabelTTF* titleCenterBottom=CCLabelTTF::labelWithString("Part 1", "Marker Felt", 48);
CCMenuItemFont* startNew=CCMenuItemFont::itemFromString("New Game", this, menu_selector(MenuLayer::onNewGame)); //创建字符型按钮,注意 menu_selector里面的写法!!! 类名::函数名!!!
CCMenuItemFont* credits=CCMenuItemFont::itemFromString("Credits", this, menu_selector(MenuLayer::onCredites));
CCMenu* menu=CCMenu::menuWithItems(startNew,credits,NULL);
//将两个按钮儿子添加到一个menu爹上,大头儿子小头爸爸不分手
//注意menuWithItem的单复数!!英文是不一样滴,还有千万别忘了NULL
//-----------楼下开始大规模setPosition了-----------
titleCenterTop->setPosition(ccp(160,380));
this->addChild(titleCenterTop);
titleCenterBottom->setPosition(ccp(160,300));
this->addChild(titleCenterBottom);
titleQuotes->setPosition(ccp(160,345));
this->addChild(titleQuotes);
titleLeft->setPosition(ccp(80,345));
this->addChild(titleLeft);
titleRight->setPosition(ccp(220,345));
this->addChild(titleRight);
menu->setPosition(ccp(160,200));
menu->alignItemsVerticallyWithPadding(40.0f);
//上面这句貌似是让menu中心对齐
this->addChild(menu);
//总结,以上这些全是 MenuLayer的node儿子!!!
//这之后,所有的的儿子都加到爹身上了,当运行这个MenuLayer之后,儿子们就可以按位置显示了。
//-----------setPosition end-------------------------
return true;
}
void MenuLayer::onNewGame(cocos2d::CCObject *pSender)
{
SceneManager::goMenu();
//运行SceneManager的 goMenu静态方法
}
void MenuLayer::onCredites(cocos2d::CCObject *pSender)
{
SceneManager::goMenu();
//还是运行goMenu方法
}
//答疑:上面这两个函数目前的主要功能是点了以后都是goMenu...也就是没反应,今后的教程,会进一步的添加对应的功能哦
最后,修改 app delegate(AppDelegate.cpp),包含 SceneManager.h头文件:
把
#include "HelloWorld.h"
修改为
#include "SceneManager.h"
当然,我们还需要修改一些内容。因为所有的“runWithScene”逻辑,现在都被SceneManager
类所替代,因此,把下面的语句:
CCScene *pScene = HelloWorld::scene();
这句话不需要了,删掉,再见吧!!
然后把下面这句,
// run
pDirector->runWithScene(pScene);
替换称
SceneManager::goMenu();
好了!!大功告成了!!编译运行看看吧!
额..屏幕是横屏的 所以现在修改
AppDelegate.cpp
这之中有一句话是,
// sets landscape mode
// pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
把第二句的注释符去掉。然后再编译运行
![](http://my.csdn.net/uploads/201205/07/1336325452_6840.jpg)
额....屏幕反了....大家自己调整 括号里面的参数给调正吧...
另:可以可以自己在AppDelegate.cpp中找到去掉左下角FPS显示的方法..
第一部分就是这些,大家果断拍砖哦
相关文章推荐
- (译)cocos2d菜单教程:第一部分
- Cocos2d-x 3.0菜单教程:第一部分
- (译)cocos2d菜单教程:第一部分
- Cocos2d-X菜单教程:第三部分
- (译)cocos2d菜单教程:第三部分(完)
- (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
- (译)cocos2d精灵教程:第一部分
- 2-2.1-(译)如何使用cocos2d来做一个简单的iphone游戏教程(第一部分)
- (译)cocos2d菜单教程:第二部分
- (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
- (译)cocos2d菜单教程:第三部分(完)
- Cocos2d-X精灵教程:第一部分
- cocos2d菜单教程(三篇)
- (译)cocos2d精灵教程:第一部分
- (译)如何使用cocos2d来做一个简单的iphone游戏教程(第一部分)
- (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
- (译)如何使用cocos2d制作基于tile地图的游戏教程:第一部分
- 2.如何使用cocos2d来做一个简单的iphone游戏教程(第一部分)
- Cocos2d-X菜单教程:第二部分
- Cocos2d-x 3.0菜单教程:第二部分