cocos2d-x游戏开发系列教程-坦克大战游戏关卡选择场景的编写上
下面我们新建一个关卡场景类代码如下:
class ChoiceScene : public cocos2d::CCLayer { public : virtual bool init(); CREATE_FUNC(ChoiceScene); static cocos2d::CCScene *scene(); };
然后我们类似的实现scene和init函数,scene比较简单,代码如下:
CCScene *ChoiceScene::scene() { CCScene *scene = CCScene::create(); ChoiceScene *layer = ChoiceScene::create(); if (scene && layer) { scene->addChild(layer); } return scene; }
然后下面实现init函数:
// 1. 初始化父类,并设置Android返回键和菜单键 if (!CCLayer::init()) { return false; } setKeypadEnabled(true);相应的要添加相应函数 virtual void keyBackClicked(void);和virtual void keyMenuClicked(void);
2.添加一个黑色背景,并进行比例缩放
CCSize szWin = CCDirector::sharedDirector()->getWinSize(); CCSprite *pSprite = CCSprite::create("Black.png"); pSprite->setPosition(ccp(szWin.width / 2, szWin.height / 2)); CCSize szSprite = pSprite->getContentSize(); pSprite->setScaleX(szWin.width / szSprite.width); pSprite->setScaleY(szWin.height / szSprite.height); this->addChild(pSprite, 0);
3.设置开始游戏、上一关,下一关按钮以及关卡数显示的图片
以及设置他们的缩放比例和位置
const char *szImgs[4] = { "paddle/btn_play.png", "paddle/btn_rewind.png", "paddle/btn_fast_forward.png", "fonts/fps_images.png" }; float fSettings[4][4] = { { 20.0f / 480, 16.0f / 320, 280.0f / 480, 160.0f / 320 }, { 20.0f / 480, 16.0f / 320, 200.0f / 480, 160.0f / 320 }, { 20.0f / 480, 16.0f / 320, 240.0f / 480, 160.0f / 320 }, { 20.0f / 480, 22.0f / 320, 280.0f / 480, 172.0f / 320 } };
4.分别对开始游戏,上一关,下一关按钮的图片加载上来显示到合适位置
for (int i = 0; i < 3; ++i) { float* fSetting = fSettings[i]; CCTexture2D* paddleTexture = CCTextureCache::sharedTextureCache()->addImage(szImgs[i]); CCSprite* pPaddle = CCSprite::createWithTexture(paddleTexture); CCSize szBtn = pPaddle->getContentSize(); pPaddle->setScaleX(szWin.width / szBtn.width * fSetting[0]); pPaddle->setScaleY(szWin.height / szBtn.height * fSetting[1]); pPaddle->setPosition(ccp(szWin.width * fSetting[2], szWin.height * fSetting[3])); addChild(pPaddle); }
5.对现实关卡的数字进行操作,设置显示数字为1,
设置锚点,设置缩放,设置位置已经颜色,
int i = 3; ccColor3B color = { 0, 0, 0 }; float* fSetting = fSettings[i]; CCLabelAtlas* label1 = CCLabelAtlas::create("1", szImgs[i], 16, 32, '.'); CCSize sz = label1->getContentSize(); label1->setAnchorPoint(ccp(0.5f, 0.5f)); label1->setScaleX(szWin.width / sz.width * fSetting[0]); label1->setScaleY(szWin.height / sz.height * fSetting[1]); label1->setPosition(ccp(szWin.width * fSetting[2], szWin.height * fSetting[3])); label1->setColor(color); addChild(label1, 0);
这些准备好了后我们回到开始场景,开始设置开始按钮点击的相应函数,
进入HelloWorld.cpp修改以下函数:
void HelloWorld::menuPlayGameCallback(CCObject* pSender) { //开始菜单被点击时调用 CCScene* pScene = ChoiceScene::scene(); CCDirector::sharedDirector()->pushScene(pScene); return; }
然后编译运行,点击开始界面中的“play game”,则进入以下界面:
完整代码下载地址: