首页 > 代码库 > 5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制
5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制
1 draw绘图
头文件 T19Draw.h |
#ifndef__T19Draw_H__ #define__T19Draw_H__ #include"cocos2d.h" #include"TBack.h"
USING_NS_CC;
classT19Draw:publicTBack { public: staticCCScene *scene(); CREATE_FUNC(T19Draw); boolinit();
voiddraw(); };
#endif |
T19Draw.cpp |
#include"T19Draw.h" #include"AppMacros.h"
CCScene *T19Draw::scene() { CCScene *scene =CCScene::create(); T19Draw *layer =T19Draw::create(); scene->addChild(layer); returnscene; }
boolT19Draw::init() { TBack::init(); returntrue; }
voidT19Draw::draw() { //设置点的尺寸大小 ccPointSize(10); //设置颜色 ccDrawColor4B(255,0,0,0); //做一个点,ccp(100,100)中的值是点的坐标位置 ccDrawPoint(ccp(100,100));
//定义一个点的集合 CCPointp[] = {ccp(100,200),ccp(100,300),ccp(200,100)}; //开始画点,第二个参数表示点的个数 ccDrawPoints(p, 3);
//画一条线段 ccDrawColor4B(0, 255, 0, 0); glLineWidth(5); ccDrawLine(ccp(100,300),ccp(200,100));
//画一个矩形,由对角线的两个点最终生成两个矩形 ccDrawRect(ccp(100,100),ccp(400,300));
ccDrawColor4B(0, 0, 255, 0); CCPointpoly[] = {ccp(150, 100),ccp(200, 150),ccp(300, 10) }; //以上面的三个点画出一个矩形,最后一个false来控制形状是否合并 //第二个参数表示的是点的个数 ccDrawPoly(poly, 3, true);
//这里表示话一个圆 ccDrawCircle(ccp(240,160),60,3.14,100,true); } |
运行结果: |
2声音和音效
一个游戏,如果不加声音会降低整个游戏的吸引力,一些经典的游戏,我们一听到声音,就知道是什么游戏。这就是声音给玩家留下的深刻音效,游戏里面的声音分为两种:北京音乐和音效使用音效引擎
我们可以使用Cocos2d-x自带的CocosDension库来使用声音引擎。CocosDension实现了简单易用的SimpleAudioEngin类,为了使用它,我们只需要引入它的头文件即可:
#include "SimpleAudioEngine.h" using namespace CocosDenshion; |
支持平台与格式
CocosDension支持的音乐格式如下:
平台 | 支持的常见文件格式 | 备注 |
Android | mp3,mid,oggg,wav | 可以播放android,media,MediaPlayer所支持的所有格式 |
ios | acc,caf,mp3,wav | 可以播放AVAudioPlayer所支持的所有格式 |
Windows | mid,mp3,wav | 无 |
CocosDension支持的音效格式如下:
平台 | 支持的常见文件格式 | 备注 |
Android | aggg,wav | 对wav的支持不完美 |
Ios | caf,m4a | 可以播放Cocos2d-iphone,CocosDesion所支持的所有格式 |
windows | mid,wav | 无 |
4预加载
加载音乐和音效通常是一个耗时间的过程,因此为了防止由加载产生的延时导致实际播放与游戏播放不协调的现象。在播放音效和音乐前,需要预加载音乐文件。
通常我们会在进入场景前调用一下两个方法来预加载文件。
SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("audio/start.wav"); SimpleAudioEngine::sharedEngine()->preloadEffect(“audio/onclick.wav”); |
5播放与停止Vs暂停和恢复
SimpleAudioEngine::sharedEngine()->playBackgroundMusic(“audio/start.wav”); |
bool T19Music::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { SimpleAudioEngine::sharedEngine()->playEffect("audio/onclick.wav"); static bool flag = true;
if (flag) { SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); //SimpleAudioEngine::sharedEngine()->stopBackgroundMusic(); } else { SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); //SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio/start.wav"); } flag = !flag; return true; } |
6 其它成员
volumn范围为[0,1]
//设置音量大小 SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.1f); //获得音量的大小 SimpleAudioEngine::sharedEngine()->getBackgroundMusicVolume(); |
7进入后台或从后台进入
void AppDelegate::applicationDidEnterBackground() { CCDirector::sharedDirector()->stopAnimation(); // if you use SimpleAudioEngine, it must be pause // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); }
// this function will be called when the app is active again void AppDelegate::applicationWillEnterForeground() { CCDirector::sharedDirector()->startAnimation(); // if you use SimpleAudioEngine, it must resume here // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); } |
8 案例说明:
T20Music.h |
#ifndef__T20Music_H__ #define__T20Music_H__
#include"cocos2d.h" #include"TBack.h" USING_NS_CC; classT20Music :publicTBack { public: staticCCScene *scene(); CREATE_FUNC(T20Music); boolinit();
virtualboolccTouchBegan(CCTouch *pTouch,CCEvent *pEvent); };
#endif
|
T20Music.cpp |
#include"T20Music.h" #include"AppMacros.h" #include"SimpleAudioEngine.h" usingnamespaceCocosDenshion;
CCScene *T20Music::scene() { CCScene *scene = CCScene::create(); T20Music *layer =T20Music::create(); scene->addChild(layer); returnscene; }
boolT20Music::init() { TBack::init(); //预加载音乐 SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("audio/start.wav"); SimpleAudioEngine::sharedEngine()->preloadEffect("audio/onclick.wav"); SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio/start.wav");
//设置触摸可以行 setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne); returntrue; }
//通过鼠标事件控制声音的显示和消失 boolT20Music::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent) { staticboolflag =true; SimpleAudioEngine::sharedEngine()->playEffect("audio/onclick.wav"); if (flag) { //SimpleAudioEngine::sharedEngine()->playBackgroundMusic("audio/start.wav"); //暂停播放音乐 SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); } else { //SimpleAudioEngine::sharedEngine()->stopBackgroundMusic("audio/start.wav"); //重新恢复播放音乐 SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); }
flag = !flag; //控制音量 SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.1f);
SimpleAudioEngine::sharedEngine()->stopAllEffects(); SimpleAudioEngine::sharedEngine()->unloadEffect("audio/start.wav");
returnfalse; } |
运行效果是:当进入这个scene之后就会听见音乐,当鼠标点击的时候声音停止了。 |
5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制