您的位置:首页 > 移动开发 > Cocos引擎

5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制

2014-10-30 10:59 525 查看


1 draw绘图

头文件

T19Draw.h

#ifndef
__T19Draw_H__

#define
__T19Draw_H__

#include
"cocos2d.h"

#include
"TBack.h"

 

USING_NS_CC;

 

class
T19Draw:public
TBack

{

public:

   
static
CCScene *
scene();

   
CREATE_FUNC(T19Draw);

   
bool
init();

 

   
void
draw();

};

 

#endif

T19Draw.cpp

#include
"T19Draw.h"

#include
"AppMacros.h"

 

CCScene *T19Draw::scene()

{

   
CCScene *
scene =
CCScene::create();

   
T19Draw *
layer =
T19Draw::create();

   
scene->addChild(layer);

   
return
scene;

}

 

bool
T19Draw::init()

{

   
TBack::init();

   
return
true;

}

 

void
T19Draw::draw()

{

   
//设置点的尺寸大小

   
ccPointSize(10);

   
//设置颜色

   
ccDrawColor4B(255,0,0,0);

   
//做一个点,ccp(100,100)中的值是点的坐标位置

   
ccDrawPoint(ccp(100,100));

 

   
//定义一个点的集合

   
CCPoint
p[] = {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);

   
CCPoint
poly[] = {
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;

}


其它成员

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();

}


案例说明:

T20Music.h

#ifndef
__T20Music_H__

#define
__T20Music_H__

 

#include
"cocos2d.h"

#include
"TBack.h"

USING_NS_CC;

class
T20Music :public
TBack

{

public:

   
static
CCScene *
scene();

   
CREATE_FUNC(T20Music);

   
bool
init();

 

   
virtual
bool
ccTouchBegan(CCTouch
*pTouch,
CCEvent *pEvent);

};

 

#endif

 

T20Music.cpp

#include
"T20Music.h"

#include
"AppMacros.h"

#include
"SimpleAudioEngine.h"

using
namespace
CocosDenshion;

 

CCScene *T20Music::scene()

{

   
CCScene *scene
= CCScene::create();

   
T20Music *
layer =
T20Music::create();

   
scene->addChild(layer);

   
return
scene;

}

 

bool
T20Music::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);

   
return
true;

}

 

//通过鼠标事件控制声音的显示和消失

bool
T20Music::ccTouchBegan(CCTouch
*pTouch,
CCEvent *pEvent)

{

   
static
bool
flag =
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");

 

   
return
false;

}

运行效果是:当进入这个scene之后就会听见音乐,当鼠标点击的时候声音停止了。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: