触摸事件分为单点触摸(EventListenerTouchOneByOne
)和多点触摸(EventListenerTouchAllAtOnce
);
1.单点触摸事件(EventListenerTouchOneByOne
)
顾名思义就是一个一个按照顺序触摸的意思,最上面的精灵优先级最高;单点触摸有四个对应的相应函数
触摸开始
vritual bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unused_event):
第一个参数cocos2d::Touch *touch:指定时间段内新增或变化的触摸对象;
第二个参数cocos2d::Event *unused_event:该特定事件的Event对象;
每次触摸事件发生时最先调用的函数,返回一个bool值.如果返回true,说明此次触摸事件已经找到目标精灵对象并被处理,之后的onTouchMoved,
onTouchEnd和onTouchCancelled函数将会接着响应.而事件分发器的对象EventDispatcher将会停止对此次事件的分发,在事件分发器中其他
的事件监听器对象则不会再去进行监听该次事件,也不会再接收到此次用户操作的数据.如果返回false,则后续的3个函数不会响应,分发器会把他交
给他添加事件的监听器进行处理;
触摸移动
vritual bool onTouchMoved(cocos2d::Touch *touch, cocos2d::Event *unused_event):
触摸结束
vritual bool onTouchEnd(cocos2d::Touch *touch, cocos2d::Event *unused_event):
触摸取消;取消的原因通常是应用长时间没有响应或者当前视图从系统的顶层移除了,例如电话打入
vritual bool onTouchCancelled(cocos2d::Touch *touch, cocos2d::Event *unused_event):
2.单点触摸事件测试
.h中
public:
static cocos2d::Scene* createScene();
virtual bool init();
// a selector callback
void menuCloseCallback(cocos2d::Ref* pSender);
void addJiangShiSprite(float dt);
//豌豆精灵
cocos2d::Sprite *plant;
CREATE_FUNC(HelloWorld);
};
//初始化精灵
//背景精灵
auto bgSprite = Sprite::createWithSpriteFrameName("bg.png");
bgSprite->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
this->addChild(bgSprite);
//添加一个精灵测试拖拽
plant = Sprite::create("1234.png");
plant->setPosition(Vec2(visibleSize.width/2, visibleSize.height*3/4));
this->addChild(plant);
//添加监听事件并实现
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan = [=](cocos2d::Touch *touch, cocos2d::Event *unused_event){
//获取点击的坐标
Vec2 touchLoa = this->convertToNodeSpace(touch->getLocation());
//判断点击的坐标是否在plant精灵范围内
if (plant->getBoundingBox().containsPoint(touchLoa)) {
return true;
}
return false;
};
listener->onTouchMoved = [=](cocos2d::Touch *touch, cocos2d::Event *unused_event){
plant->setPosition(plant->getPosition() + touch->getDelta());
};
listener->onTouchEnded = [=](cocos2d::Touch *touch, cocos2d::Event *unused_event){
//oc代码测试
[HelloWorldOC alertWithTitle:@"oc和cocos2d-x"];
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);