天天看點

5.cocos2dx中關于draw繪圖,聲音和音效,預加載,播放與停止Vs暫停和恢複,音量控制



1 draw繪圖

頭檔案

t19draw.h

#ifndef

__t19draw_h__

#define

#include

"cocos2d.h"

"tback.h"

using_ns_cc;

class

t19draw:public

tback

{

public:

static

ccscene *

scene();

create_func(t19draw);

bool

init();

void

draw();

};

#endif

t19draw.cpp

"t19draw.h"

"appmacros.h"

ccscene *t19draw::scene()

scene =

ccscene::create();

t19draw *

layer =

t19draw::create();

scene->addchild(layer);

return

scene;

}

t19draw::init()

tback::init();

true;

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

poly[] = {

ccp(150, 100),

ccp(200, 150),

ccp(300, 10) };

//以上面的三個點畫出一個矩形,最後一個false來控制形狀是否合并

//第二個參數表示的是點的個數

ccdrawpoly(poly,

3, true);

//這裡表示話一個圓

ccdrawcircle(ccp(240,160),60,3.14,100,true);

運作結果:

5.cocos2dx中關于draw繪圖,聲音和音效,預加載,播放與停止Vs暫停和恢複,音量控制

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支援的音效格式如下:

aggg,wav

對wav的支援不完美

caf,m4a

可以播放cocos2d-iphone,cocosdesion所支援的所有格式

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

__t20music_h__

t20music :public

create_func(t20music);

virtual

cctouchbegan(cctouch

*ptouch,

ccevent *pevent);

t20music.cpp

"t20music.h"

"simpleaudioengine.h"

using

namespace

cocosdenshion;

ccscene *t20music::scene()

ccscene *scene

= ccscene::create();

t20music *

t20music::create();

t20music::init()

//預加載音樂

simpleaudioengine::sharedengine()->preloadeffect("audio/onclick.wav");

simpleaudioengine::sharedengine()->playbackgroundmusic("audio/start.wav");

//設定觸摸可以行

settouchenabled(true);

settouchmode(kcctouchesonebyone);

//通過滑鼠事件控制聲音的顯示和消失

t20music::cctouchbegan(cctouch

ccevent *pevent)

flag =

if (flag)

    //simpleaudioengine::sharedengine()->playbackgroundmusic("audio/start.wav");

//暫停播放音樂

else

    //simpleaudioengine::sharedengine()->stopbackgroundmusic("audio/start.wav");

//重新恢複播放音樂

//控制音量

simpleaudioengine::sharedengine()->stopalleffects();

simpleaudioengine::sharedengine()->unloadeffect("audio/start.wav");

false;

運作效果是:當進入這個scene之後就會聽見音樂,當滑鼠點選的時候聲音停止了。

繼續閱讀