學過OC開發的我進行cocosdx雖說有點熟悉,但是還是得一步一個腳印,多敲
在C++函數中每個方法都需要聲明在都文件中,而相對OC來說私有方法可以不需要在頭文件中聲明,調用時編譯器會幫你找到相對應的方法,
所在在一個類中必備的三個函數肯定是
virtual bool init();初始化當前對象
static cocos2d::CCScene* scene();創建當前的場景
void menuCloseCallback(CCObject* pSender);//聲明的方法 類似想oc中-(void)menuCloseCallback:(NSObject*)pSender;
CREATE_FUNC(HelloWorld); //下面我們進入宏這個方法裏面看看實現了什麼
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
__TYPE__ *pRet = new __TYPE__(); \
if (pRet && pRet->init()) \ //先進行判斷對象是否實例化
{ \
pRet->autorelease(); \ //如果實例化過就進行發送自動釋放消息 並且返回一個自動釋放的對象
return pRet; \
} \
else \ //否者就滯空該對象,並且跳出該方法
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
下面我們在init()函數中創建一個讓界面展示的的HelloWorld字體
CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "SnellRoundhand-Bold", 40);
pLabel->setPosition( ccp(size.width / 2, size.height - 50) );
this->addChild(pLabel, 1); //這裏有兩個參數 第一個參數估計大家都知道是幹什麼的吧 重點是第二個 他是說明你需要將該對象放在當前視圖的第幾層 0爲最底層。。。。
CCSprite* pSprite = CCSprite::create("HelloWorld.png",CCRect(0, 0, 480, 320));//精靈類 放上了一張HelloWorld.png的圖片作爲背景
pSprite->setScale(2); //設置大小比例2倍
pSprite->setPosition( ccp(size.width/2, size.height/2) );
this->addChild(pSprite, 0); //將該對象放在當前視圖的第0爲最底層
//菜單類
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback) );//圖片菜單項
//參數1 normal狀態下的圖片 2.點擊後的圖片 3.響應對象設置爲當前 4.響應方法(必須爲頭文件聲明的方法)
pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);-------注意這裏菜單項都歸menu管理-------------
pMenu->setPosition( CCPointZero );
this->addChild(pMenu, 1);
CCMenuItemLabel *labelItem=CCMenuItemLabel::create(CCLabelTTF::create("Menu", "SnellRoundhand-Bold", 40),this,menu_selector(HelloWorld::onMenuAction));//label菜單項
//參數1 一個label對象 2.相應對象設置爲當前 3.響應方法(必須爲頭文件聲明的方法)
CCSize size = CCDirector::sharedDirector()->getWinSize();
labelItem->setPosition(ccp(80, size.height-80));
CCMenu *menu=CCMenu::create(labelItem,NULL);-------注意這裏猛惡菜單項都歸menu管理-------------
menu->setPosition(CCPointZero);//通常這裏menu的postion都設置CCPointZero
this->addChild(menu,1);
其實上面兩項可以結合在一起
CCMenu *menu=CCMenu::create(labelItem,pCloseItem ,NULL);
結果就是: