大功告成,快去试一下吧!
2.精确命中
手机上和电脑上的触摸事件的区别在于:电脑上我们是用鼠标点击,而手机上使用手指去摁,触摸的精度的高低不言而喻!让我们来看下面这张图片:
让我们看右上角的X号按钮,在手机上点击它来说应该是很困难的!他的真实尺寸应该是红色矩形的区域(假设:50x50),为了让玩家在引导时,能够很方便的点击到它,我们将实际的可触摸区域设置为蓝色区域(假设:100x100),这样应该很好点到了吧!
这样会有一个新的问题,如果点击到红色和蓝色之间的区域,下面的x按钮时响应不到的,那么怎么办呢?我们需要修改touch的数据(设置为按钮的正中心),然后touch事件将会以新的数据向下传递!这样下面的按钮就能响应到了!
让我们看看代码吧:
bool CTeachLayer::ccTouchBegan( CCTouch* pTouch, CCEvent* pEvent )
{
CCPoint touchPoint = pTouch->getLocation();
if (!CGlobal::s_bTeach)
{
return false;
}
//假设按钮在(300,200)的位置,那么蓝色矩形如下:
CCRect m_obRect=CCRectMake(
250,
150,
100,
100);
if (m_obRect.containsPoint(touchPoint))
{
//得到蓝色矩形的中心点(300,200)
CCPoint pos=ccp(m_obRect.getMidX(),m_obRect.getMidY());
//这里要转化为UI坐标系(左上角为0,0点)
pos=CCDirector::sharedDirector()->convertToUI(pos);
//设置触摸信息
pTouch->setTouchInfo(pTouch->getID(),pos.x,pos.y);
return false;
}
return true;
}
三.逻辑处理及代码组织
这里我大概说下新手引导的架构,代码肯定贴不出来,太多太乱,说的不对的地方,欢迎大家拍砖吐槽!>_<
1.首先创建了一个CTeachLayer继承自CCLayer,添加到游戏的最上层(UI层之上),记住,要先添加游戏的其层,最后添加CTeachLayer,可以保存全局指针!
2.用一个枚举记下你要引导的所有步骤,在根据枚举值去设置高亮的位置及触摸区域!可以记下当前引导的进度,以方便下次继续引导!
3.游戏逻辑中免不了要判断引导(例:出第3波怪的时候引导玩家使用清屏道具),用全局的指针去设置引导的步骤!











