5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制
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; } | 
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; 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之后就會聽見音樂,當鼠標點擊的時候聲音停止了。 | 
?
總結
以上是生活随笔為你收集整理的5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 后侧尾灯撞,突出了怎么办,后车尾灯撞突出
- 下一篇: 8 cocos2dx添加场景切换效果,控
