从http://blog.youkuaiyun.com/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()。