跟着BOY学习开发cocos2d-x 游戏 实战篇(2)之 欢迎 界面编写

时间:2022-04-08 12:10:44

                 在这里我要道歉了本来我决定是每天更新一篇新的博客 可是 一放假 感觉就懒了 所以就没写了 今天 就把昨天的界面 给补上。

             在这里我要说明一下 今天用到的主要知识点 按钮的使用, 界面的跳转 包裹 界面跳转的之间的 特效 还有音乐的播放 ,如何使用cocos2d-x 来保存一些值。对于这些知识点 如果大家不清楚的地方请看下无脑码农的视频或者是龙灵修的视频 这些知识点他们都有讲解。当然也可以在我博客中留言 不懂的地方我也会给你们解答一下。好了废话不多说了下面可是上菜了

在这里我要注明一点 我每次使用图片的时候都是从缓存中去取的 所以  每次编写心的界面的时候 所用到的图片都会在loading 去添加 让其先加载在内存中。     

           首先我贴出 welcome 中的 类方法

          

#ifndef __WELCOMEGAME_LAYER_H__
#define __WELCOMEGAME_LAYER_H__
#include "BaseLayer.h"
class WelComeGameLayer:public BaseLayer{
public:
static cocos2d::CCScene* scene();
virtual bool init();
CREATE_FUNC(WelComeGameLayer);
virtual void onEnter();
private:
// s设置界面
bool setUpdateView();
// 播放或者暂停音乐回调函数
void vedioOnAndOffCallBack(cocos2d::CCObject* pSend);
// 跳转的 关于开发者界面的回调函数
void menuCoderCallback(cocos2d::CCObject* pSend);

};
#endif
    

然后贴出实现代码

      

#include "WelComeGameLayer.h"
#include "AboutCoderLayer.h"
#include "SimpleAudioEngine.h"
USING_NS_CC;
bool WelComeGameLayer::init(){
bool isRet=false;
do
{
CC_BREAK_IF(!BaseLayer::init());
CC_BREAK_IF(!setUpdateView());
isRet=true;
} while (0);
return isRet;
}
void WelComeGameLayer::onEnter(){
BaseLayer::onEnter();
if(CocosDenshion::SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()){
}else {
if(CCUserDefault::sharedUserDefault()->getBoolForKey("isplay",true)){
CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music/dt.mp3",true);
// 把 音乐状态设置为播放状态
CCUserDefault::sharedUserDefault()->setBoolForKey("isplay",true);
}
}
}
CCScene* WelComeGameLayer::scene(){
CCScene* scene=CCScene::create();
WelComeGameLayer* layer=WelComeGameLayer::create();
scene->addChild(layer);
return scene;
}
bool WelComeGameLayer::setUpdateView(){
bool isRet=false;
do
{
// 从缓存中 取出 背景图片
CCTexture2D* texturebg= CCTextureCache::sharedTextureCache()->textureForKey("gmbg/welcomebg.png");
CCSprite* pSpriteBg=CCSprite::createWithTexture(texturebg);
CC_BREAK_IF(!pSpriteBg);
pSpriteBg->setPosition(getWinCenter());
this->addChild(pSpriteBg,1);

// 添加声音菜单按钮
CCTexture2D* textureon = CCTextureCache::sharedTextureCache()->textureForKey("gmme/button_sound_on.png");
CCTexture2D* textureoff = CCTextureCache::sharedTextureCache()->textureForKey("gmme/button_sound_off.png");
CCMenuItemSprite* pitemVon=CCMenuItemSprite::create(CCSprite::createWithTexture(textureon),CCSprite::createWithTexture(textureon));
CC_BREAK_IF(!pitemVon);
CCMenuItemSprite* pitemVoff=CCMenuItemSprite::create(CCSprite::createWithTexture(textureoff),CCSprite::createWithTexture(textureoff));
CC_BREAK_IF(!pitemVoff);
CCMenuItemToggle* pVedioTo=NULL;
// 当现在 音乐是 播放的时候界面上显示的按钮应该是 暂停音乐按钮 反之 则显示播放按钮
if(CCUserDefault::sharedUserDefault()->getBoolForKey("isplay",false)){
pVedioTo=CCMenuItemToggle::createWithTarget(this,menu_selector(WelComeGameLayer::vedioOnAndOffCallBack),pitemVoff,pitemVon,NULL);
}else {
pVedioTo=CCMenuItemToggle::createWithTarget(this,menu_selector(WelComeGameLayer::vedioOnAndOffCallBack),pitemVon,pitemVoff,NULL);
}


CC_BREAK_IF(!pVedioTo);
// 注意 里面的 0.15 和0.55 都是 通过PS 定位 看看这个图片放在那里计算出来的
pVedioTo->setPosition(converSpritRel(getWinSize().width*0.15f,getWinSize().height*0.55f));

// 创建开发者 菜单按钮
CCTexture2D* texturecoder_up = CCTextureCache::sharedTextureCache()->textureForKey("gmme/coder_up.png");
CCTexture2D* texturecoder_down = CCTextureCache::sharedTextureCache()->textureForKey("gmme/coder_down.png");
CCMenuItemSprite* pcoder=CCMenuItemSprite::create(CCSprite::createWithTexture(texturecoder_up),CCSprite::createWithTexture(texturecoder_down),this,menu_selector(WelComeGameLayer::menuCoderCallback));
CC_BREAK_IF(!pcoder);
pcoder->setPosition(converSpritRel(getWinSize().width*0.78f,getWinSize().height*0.21f));

CCMenu* pMenu=CCMenu::create(pVedioTo,pcoder,NULL);
CC_BREAK_IF(!pMenu);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu,2);



isRet=true;
} while (0);
return isRet;
}
void WelComeGameLayer::vedioOnAndOffCallBack(CCObject* pSend){
if(CCUserDefault::sharedUserDefault()->getBoolForKey("isplay",false)){
CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
CCLOG("music is stop");
CCUserDefault::sharedUserDefault()->setBoolForKey("isplay",false);
}else {
CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
CCUserDefault::sharedUserDefault()->setBoolForKey("isplay",true);
CCLOG("music is play");
}

}
void WelComeGameLayer::menuCoderCallback(CCObject* pSend){
CCScene* se=AboutCoderLayer::scene();
CCDirector::sharedDirector()->replaceScene(CCTransitionSlideInR::create(1,se));
}
呵呵到这里一个欢迎界面 就完了了 当然在这个欢迎界面的里面还缺少了 一部分的按钮 例如开始菜单 成就 等等按钮 哪些等到用到的时候在添加 这个是本人的一个习惯 

  跟着BOY学习开发cocos2d-x 游戏 实战篇(2)之 欢迎 界面编写

至于关于跳转到开发者的界面这个界面的代码我就不在粘贴出来 因为实在太简单了 开发者界面就一张图片和一个返回按钮 我会在面的附件中上传源代码 不懂的同学可以问我

贴出开发者界面

     跟着BOY学习开发cocos2d-x 游戏 实战篇(2)之 欢迎 界面编写

     对于上面的播放按钮 有一个小技巧 就是如果当你背景音乐是在播放状态的时候应该显示 暂停音乐的 图片 当你的音乐是是暂停的时候应该显示成播放状态。

    不知道看到这里大家还是否有学下去的欲望 不管大家时候有学下去的欲望我都会把 这个游戏在博客中完整的写完 可以供新手朋友们参考,要学习无脑码农和龙灵修的精神

       下一节 我将会 开始编写 游戏的主界面  是不是很期待啊。那就关注我的博客  或许能给你带来新的收获,不过我在这里声明 大家使用资源的文件的时候仅供学习使用切勿使用商业用途否则一切都与本人无关。 在这里我在说明一点对于代码里面有些的不简洁的地方 或者应该加注释却没有加注释 或者注释加的不正确的地方希望大家提出来我都会虚心的接受。给大家打造一个任何一个新手都能看得懂的游戏。


       本节源码地址