zoukankan      html  css  js  c++  java
  • Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现

    HelloWorld场景就是游戏中的主菜单场景。HelloWorld.h文件代码例如以下:
    #define __HELLOWORLD_SCENE_H__
    
    
    #include "cocos2d.h"
    #include "SimpleAudioEngine.h"											①
    #include "SettingScene.h"
    
    
    class HelloWorld : public cocos2d::Layer
    {
    public:
    	static cocos2d::Scene* createScene();
    
    
    	virtual bool init();  													②
    	virtual void onEnter();
    	virtual void onEnterTransitionDidFinish();
    	virtual void onExit();
    	virtual void onExitTransitionDidStart();
    	virtual void cleanup();													③
    
    
    	void menuItemHelpCallback(cocos2d::Ref* pSender);
    	void menuItemStartCallback(cocos2d::Ref* pSender);
    	void menuItemSettingCallback(cocos2d::Ref* pSender);
    	CREATE_FUNC(HelloWorld);
    };
    
    
    
    
    bool HelloWorld::init()
    {
    	if ( !Layer::init() )
    	{
    		return false;
    	}
    
    
    	log("HelloWorld init");
    
    
    	Size visibleSize = Director::getInstance()->getVisibleSize();
    	Point origin = Director::getInstance()->getVisibleOrigin();
    
    
    	Sprite *bg = Sprite::create("background.png");
    
    
    	bg->setPosition(Point(origin.x + visibleSize.width/2,
    		origin.y + visibleSize.height /2));
    	this->addChild(bg);
    
    
    	//開始精灵
    	Sprite *startSpriteNormal = Sprite::create("start-up.png");
    	Sprite *startSpriteSelected = Sprite::create("start-down.png");
    
    
    	MenuItemSprite *startMenuItem = MenuItemSprite::create(startSpriteNormal, 
    		startSpriteSelected,
    		CC_CALLBACK_1(HelloWorld::menuItemStartCallback, this));
    	startMenuItem->setPosition(Director::getInstance()->convertToGL(Point(700, 170)));
    
    
    	// 设置图片菜单
    	MenuItemImage *settingMenuItem = MenuItemImage::create(
    		"setting-up.png",
    		"setting-down.png",
    		CC_CALLBACK_1(HelloWorld::menuItemSettingCallback, this)); 
    	settingMenuItem->setPosition(Director::getInstance()->convertToGL(Point(480, 400)));
    
    
    	// 帮助图片菜单
    	MenuItemImage *helpMenuItem = MenuItemImage::create(
    		"help-up.png",
    		"help-down.png",
    		CC_CALLBACK_1(HelloWorld::menuItemHelpCallback, this));	
    	helpMenuItem->setPosition(Director::getInstance()->convertToGL(Point(860, 480)));
    
    
    	Menu* mu = Menu::create(startMenuItem, settingMenuItem, helpMenuItem, NULL);	
    	mu->setPosition(Point::ZERO);
    	this->addChild(mu);
    
    
    	return true;
    }
    
    
    void HelloWorld::menuItemSettingCallback(Ref* pSender)
    {	
    	auto sc = Setting::createScene();
    	auto reScene = TransitionJumpZoom::create(1.0f, sc);
    	Director::getInstance()->pushScene(reScene);
    	SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");					②
    }
    
    
    void HelloWorld::menuItemHelpCallback(Ref* pSender)
    {
    	MenuItem* item = (MenuItem*)pSender;
    	log("Touch Help %p", item);
    	SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");					③
    }
    
    
    void HelloWorld::menuItemStartCallback(Ref* pSender)
    {
    	MenuItem* item = (MenuItem*)pSender;
    	log("Touch Start %p", item);
    	SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");					④
    }
    
    
    void HelloWorld::onEnter()
    {
    	Layer::onEnter();
    	log("HelloWorld onEnter");		
    }
    
    
    void HelloWorld::onEnterTransitionDidFinish()
    {
    	Layer::onEnterTransitionDidFinish();
    	log("HelloWorld onEnterTransitionDidFinish");
    	//播放
    	SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Jazz.mp3", true);		⑤
    }
    
    
    void HelloWorld::onExit()
    {
    	Layer::onExit();
    	log("HelloWorld onExit");
    }
    
    
    void HelloWorld::onExitTransitionDidStart()
    {
    	Layer::onExitTransitionDidStart();
    	log("HelloWorld onExitTransitionDidStart");
    }
    
    
    void HelloWorld::cleanup()
    {
    	Layer::cleanup();
    	log("HelloWorld cleanup");	
    	//停止
    	SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound/Jazz.mp3");			⑥
    }


    上述代码第①行using namespace CocosDenshion是使用命名空间CocosDenshion,它是CocosDenshion引擎所须要的。代码②、③、④行SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav")是在点击菜单时候播放音效。第⑤行代码是onEnterTransitionDidFinish()函数中播放背景音乐。第⑥行代码是cleanup()函数中停止播放背景音乐。



    很多其它内容请关注最新Cocos图书《Cocos2d-x实战 C++卷》
    本书交流讨论站点:http://www.cocoagame.net
    很多其它精彩视频课程请关注智捷课堂Cocos课程:http://v.51work6.com
    欢迎增加Cocos2d-x技术讨论群:257760386


    《Cocos2d-x实战 C++卷》现已上线。各大商店均已开售:

    京东:http://item.jd.com/11584534.html

    亚马逊:http://www.amazon.cn/Cocos2d-x%E5%AE%9E%E6%88%98-C-%E5%8D%B7-%E5%85%B3%E4%B8%9C%E5%8D%87/dp/B00PTYWTLU

    当当:http://product.dangdang.com/23606265.html

    互动出版网:http://product.china-pub.com/3770734

    《Cocos2d-x实战 C++卷》源代码及样章下载地址:

    源代码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1 

    样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1

    欢迎关注智捷iOS课堂微信公共平台

  • 相关阅读:
    基于腾讯开源的msec来进行php开发模块
    《每周一点canvas动画》——圆周运动
    Socket.io+Notification实现浏览器消息推送
    10行 JavaScript 实现文本编辑器
    zzuli2228: 神奇的排名
    HDU2044:一只小蜜蜂...
    zzuli2226:神奇的薯条
    HDU2028:Lowest Common Multiple Plus
    HDU2036:改革春风吹满地
    HDU2029:Palindromes _easy version
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5209517.html
Copyright © 2011-2022 走看看