加载中…
个人资料
索金涛
索金涛
  • 博客等级:
  • 博客积分:0
  • 博客访问:0
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

第二十二讲:在Cocos2d-x中如何响应单点和多点触摸事件

(2014-10-31 22:05:27)
标签:

股票

分类: cocos2d-x

移动时代,手机很重要的一部分就是可以人机交互,玩家通过手指在屏幕上移动点击与游戏进行互动,传达信息。相比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);
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有