【cocos2dx学习笔记】单点触摸和音乐播放

http://blog.csdn.net/zhy_cheng/article/details/8273435转载

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

    void HelloWorld::onEnter()  
    {  
        CCLog("onEnter");  
        CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(  
            this,//在那个类中实现触屏回调函数  
            0, //优先级  
            true);//触摸时间是否被该目标截获  
    }  


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

然后覆盖触屏的回调函数

<span><span class="keyword">virtual</span><span> </span><span class="datatypes">bool</span><span> ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);  </span></span><span><span class="keyword">
virtual</span><span> </span><span class="keyword">void</span><span> ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);  </span></span><span><span></span></span><span><span class="keyword">
virtual</span><span> </span><span class="keyword">void</span><span> ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);  </span></span><span></span><span><span class="keyword">
virtual</span><span> </span><span class="keyword">void</span><span> ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);  </span></span>

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

    bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)  
    {  
        CCLog("ccTouchBegan");  
      
        CCPoint p=pTouch->getLocation(); //获取触摸点  
        float x=p.x;  
        float y=p.y;  
        char *buf=new char[40];  
        memset(buf,0,10);//全部置0  
        sprintf(buf,"x=%f,y=%f",x,y);//格式化到buf中  
        CCLog(buf);  
        delete []buf;         
        return true;//这表示触摸消息是否被处理,若为true则接着往下传,false则不往下传,其他函数则无法捕获  
    }  
    void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)  
    {  
        CCLog("ccTouchMoved");  
        CCPoint p=pTouch->getLocation();  
        float x=p.x;  
        float y=p.y;  
        char *buf=new char[40];  
        memset(buf,0,10);  
        sprintf(buf,"x=%f,y=%f",x,y);  
      
          
        CCLog(buf);  
      
      
        delete []buf;  
    }  
    void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)  
    {  
        CCLog("ccTouchEnded");  
        CCPoint p=pTouch->getLocation();  
        float x=p.x;  
        float y=p.y;  
        char *buf=new char[40];  
        memset(buf,0,10);  
        sprintf(buf,"x=%f,y=%f",x,y);  
      
          
        CCLog(buf);  
      
      
        delete []buf;  
      
      
      
      
    }  
    void HelloWorld::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)  
    {  
        CCLog("ccTouchCancelled");  
        CCPoint p=pTouch->getLocation();  
        float x=p.x;  
        float y=p.y;  
        char *buf=new char[40];  
        memset(buf,0,10);  
        sprintf(buf,"x=%f,y=%f",x,y);  
      
          
        CCLog(buf);  
      
      
        delete []buf;  
    }  


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

 

 

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


    CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadBackgroundMusic("music.mp3");  
    CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music.mp3");  

一般都要先加载吧。

下面是播放音乐的函数


    SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();//停止背景音乐,可以代一个布尔型参数,表示是否释放音乐文件  
      
    SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();//暂停背景音乐  
      
    SimpleAudioEngine::sharedEngine()->rewindBackgroundMusic();//重头调用背景音乐  
      
    SimpleAudioEngine::sharedEngine()->isBackgroundMusicPlaying()//返回布尔型参数,是否在放着背景音乐  
      
    SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(0.5);//设置音量0.0-1.0  


还有播放音效的:

    preloadEffect( );  
    playEffect();  
    stopEffect();//停止音效,可以选择单独停掉一个音效,通过创建时的m_nSoundId停止  
      
    stopAllEffects();//停止全部音效  
      
    pauseEffect(m_nSoundId);//暂停单个音效  
      
    resumeEffect(m_nSoundId);//重新开始音效  
      
    pauseAllEffects();//暂停全部音效  
      
    resumeAllEffects();//重新开始全部音效  
      
    setEffectsVolume(0.5);//设置音效音量  
      
    unloadEffect(std::string(CCFileUtils::fullPathFromRelativePath(EFFECT_FILE)).c_str());//卸载音效  

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值