移动时代,手机很重要的一部分就是可以人机交互,玩家通过手指在屏幕上移动点击与游戏进行互动,传达信息。相比PC上鼠标的输入,这种触控能带给用户更真实的体验,所以触摸事件也是游戏中不可缺少的部分,并且随着手机硬件的不断提升,现在市场上大部分手机屏幕也支持多点触摸。本节视频将介绍在引擎中如何响应单点和多点触摸事件。
////////////////////11111111111111
单点触控
class MyScene : public CCLayer
{
public:
MyScene(void);
~MyScene(void);
virtual bool init();
static CCScene *scene();
void menuCallback(CCObject* pSender);
virtual void
onEnter();
virtual void onExit();
virtual bool
ccTouchBegan(CCTouch *pTouch,CCEvent
*event); //第一次触屏事件
virtual void ccTouchMoved(CCTouch *pTouch,CCEvent
*event); //滑动操作
virtual void CCTouchEnded(CCTouch *pTouch,CCEvent
*event); //当离开屏幕时候,响应的事件
virtual void ccTouchCancelled(CCTouch
*pTouch,CCEvent *event); //取消
CCSprite *sp;
CREATE_FUNC(MyScene);
};
//////////////////////////////////////////////
void MyScene:: onEnter()
{
CCLayer::onEnter();
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);
//1,委托目标,2,值越小,优先级别越高,如果0,按钮最先被响应。3,是否拦截后面的操作
}
void MyScene::onExit()
{
CCLayer::onExit();
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
}
bool MyScene:: ccTouchBegan(CCTouch *pTouch,CCEvent
*event) //第一次触屏事件
{
CCPoint pos =
pTouch->getLocation();//返回OPenGL坐标
sp =
CCSprite::create("icon.png"); //创建一个精灵
sp->setPosition(pos);
addChild(sp);
CCLOG("TouchBegan");
return
true;//true,继续响应后面的,false,就不响应后面的了
}
void MyScene::ccTouchMoved(CCTouch *pTouch,CCEvent
*event) //滑动操作
{
CCPoint pos =
pTouch->getLocation();//返回OPenGL坐标
sp->setPosition(pos);
CCLOG("TouchMoved");
}
void MyScene::CCTouchEnded(CCTouch *pTouch,CCEvent
*event) //当离开屏幕时候,响应的事件
{
CCLOG("TouchEnded");
}
void MyScene::ccTouchCancelled(CCTouch *pTouch,CCEvent
*event) //取消
{
CCLOG("TouchCancelled");
}
//////////////多点触控
virtual void ccTouchesBegan(CCSet *pTouches,CCEvent *event);
virtual void ccTouchesMoved(CCSet
*pTouches,CCEvent *event);
virtual void ccTouchesEnded(CCSet
*pTouches,CCEvent *event);
//
void MyScene::ccTouchesBegan(CCSet *pTouches,CCEvent
*event)//得到每个触摸点
{
CCSetIterator iter = pTouches->begin();
for(;iter != pTouches->end(); iter++)
{
CCTouch *pTouch =
(CCTouch*)(*iter);
CCPoint pos =
pTouch->getLocation();
CCSprite *sp =
CCSprite::create("icon.png");
sp->setPosition(pos);
addChild(sp);
}
}
//////////////
void MyScene::ccTouchesBegan(CCSet *pTouches,CCEvent
*event)//得到每个触摸点
{
//多点触控也可设置成单点触控
CCTouch *touch =
(CCTouch*)pTouches->anyObject();
CCPoint pos = touch->getStartLocation();
CCSprite *sp =
CCSprite::create("icon.png");
sp->setPosition(pos);
addChild(sp);
}
void MyScene::ccTouchesMoved(CCSet *pTouches,CCEvent *event)
{
}
void MyScene::ccTouchesEnded(CCSet *pTouches,CCEvent *event)
{
}
//////////////333333333333333
void MyScene::ccTouchesBegan(CCSet *pTouches,CCEvent
*event)//得到每个触摸点
{
CCSetIterator iter = pTouches->begin();
for(;iter != pTouches->end(); iter++)
{
CCTouch *pTouch =
(CCTouch*)(*iter);
CCPoint pos =
pTouch->getLocation();
pTouch->getID();//可以得到有几个点
}
//CCTouch *touch =
(CCTouch*)pTouches->anyObject();
//CCPoint pos =
touch->getStartLocation();
//CCSprite *sp =
CCSprite::create("icon.png");
//sp->setPosition(pos);
//addChild(sp);
}
加载中,请稍候......