【Cocos2d-x游戏引擎开发笔记(6)】触屏事件与多媒体

来源:互联网 发布:php.ini设置 编辑:程序博客网 时间:2024/06/13 13:04
转载自:http://blog.csdn.net/zhy_cheng/article/details/8273435

Cocos2d-x要实现触屏事件,首先覆盖父类的onEnter函数,在这个函数中设置触屏事件。

[cpp] view plaincopy
  1. void HelloWorld::onEnter()  
  2. {  
  3.     CCLog("onEnter");  
  4.     CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(  
  5.         this,//在那个类中实现触屏回调函数  
  6.         0, //优先级  
  7.         true);//触摸时间是否被该目标截获  
  8. }  


这表示进入布景后就注册触屏事件

然后覆盖触屏的回调函数

[cpp] view plaincopy
  1. virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);  
  2. virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);  
  3. virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);  
  4. virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);  


在回调函数中,打印触摸的点

[cpp] view plaincopy
  1. bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)  
  2. {  
  3.     CCLog("ccTouchBegan");  
  4.   
  5.     CCPoint p=pTouch->getLocation(); //获取触摸点  
  6.     float x=p.x;  
  7.     float y=p.y;  
  8.     char *buf=new char[40];  
  9.     memset(buf,0,10);//全部置0  
  10.     sprintf(buf,"x=%f,y=%f",x,y);//格式化到buf中  
  11.     CCLog(buf);  
  12.     delete []buf;         
  13.     return true;//这表示触摸消息是否被处理,若为true则接着往下传,false则不往下传,其他函数则无法捕获  
  14. }  
  15. void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)  
  16. {  
  17.     CCLog("ccTouchMoved");  
  18.     CCPoint p=pTouch->getLocation();  
  19.     float x=p.x;  
  20.     float y=p.y;  
  21.     char *buf=new char[40];  
  22.     memset(buf,0,10);  
  23.     sprintf(buf,"x=%f,y=%f",x,y);  
  24.   
  25.       
  26.     CCLog(buf);  
  27.   
  28.   
  29.     delete []buf;  
  30. }  
  31. void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)  
  32. {  
  33.     CCLog("ccTouchEnded");  
  34.     CCPoint p=pTouch->getLocation();  
  35.     float x=p.x;  
  36.     float y=p.y;  
  37.     char *buf=new char[40];  
  38.     memset(buf,0,10);  
  39.     sprintf(buf,"x=%f,y=%f",x,y);  
  40.   
  41.       
  42.     CCLog(buf);  
  43.   
  44.   
  45.     delete []buf;  
  46.   
  47.   
  48.   
  49.   
  50. }  
  51. void HelloWorld::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)  
  52. {  
  53.     CCLog("ccTouchCancelled");  
  54.     CCPoint p=pTouch->getLocation();  
  55.     float x=p.x;  
  56.     float y=p.y;  
  57.     char *buf=new char[40];  
  58.     memset(buf,0,10);  
  59.     sprintf(buf,"x=%f,y=%f",x,y);  
  60.   
  61.       
  62.     CCLog(buf);  
  63.   
  64.   
  65.     delete []buf;  
  66. }  


在ccTouchMoved方法中,打印鼠标moved的点,相同长度,moved多少点,与FPS和move的速度有关。

 

 

至于播放音乐与音效,先来个示例

[cpp] view plaincopy
  1. CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("music.mp3");  
  2.     CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music.mp3");  


一般都要先加载吧。

下面是播放音乐的函数

[cpp] view plaincopy
  1. SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();//停止背景音乐,可以代一个布尔型参数,表示是否释放音乐文件  
  2.   
  3. SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();//暂停背景音乐  
  4.   
  5. SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();//重头调用背景音乐  
  6.   
  7. SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()//返回布尔型参数,是否在放着背景音乐  
  8.   
  9. SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);//设置音量0.0-1.0  


还有播放音效的:

[cpp] view plaincopy
  1. preloadEffect( );  
  2. playEffect();  
  3. stopEffect();//停止音效,可以选择单独停掉一个音效,通过创建时的m_nSoundId停止  
  4.   
  5. stopAllEffects();//停止全部音效  
  6.   
  7. pauseEffect(m_nSoundId);//暂停单个音效  
  8.   
  9. resumeEffect(m_nSoundId);//重新开始音效  
  10.   
  11. pauseAllEffects();//暂停全部音效  
  12.   
  13. resumeAllEffects();//重新开始全部音效  
  14.   
  15. setEffectsVolume(0.5);//设置音效音量  
  16.   
  17. unloadEffect(std::string(CCFileUtils::fullPathFromRelativePath(EFFECT_FILE)).c_str());//卸载音效  


 

最后要记住,在程序不需要音乐时,要SimpleAudioEngine::sharedEngine()->end();释放sharedEngine()。

0 0
原创粉丝点击