第一步、首先我们要新建一个头文件和一个cpp文件,在新建文件的时候我们要改变一下文件保存的位置,选择Classes文件(ps:不要以为你在classes上右键添加,它就默认给你添加到classes文件夹里边了,其实不是,我们要手动改一下,不然以后会出错误,如果不在classes文件夹下,出现了错误,可以看我的另一篇博客,有修改的方法)
第二步、在头文件里边添加如下三行代码
virtual bool onTouchBegan(Touch* touch, Event* event);
virtual bool onTouchMoved(Touch* touch, Event* event);
virtual bool onTouchEnded(Touch* touch, Event* event);
第三步、在cpp文件,init函数里,添加触摸事件的监听代码如下
// EventListenerTouchOneByOne是单点触摸监听
auto touchListener = EventListenerTouchOneByOne::create();
touchListener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchBegan, this);
touchListener->onTouchMoved = CC_CALLBACK_2(GameScene::onTouchMoved, this);
touchListener->onTouchEnded = CC_CALLBACK_2(GameScene::onTouchEnded, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this); //把监听器添加到事件派发器
第四步、在cpp文件中、实现刚才在头文件里重载的哪三个函数、代码如下
bool GameScene::onTouchBegan(Touch* touch, Event* event)
{
beginPoint = touch->getLocation(); //得到开始的坐标点
return true;
}
void GameScene::onTouchMoved(Touch* touch, Event* event)
{
}
void GameScene::onTouchEnded(Touch* touch, Event* event)
{
Point endPoint = touch->getLocation();//得到结束的坐标点
//开始的坐标点与结束的坐标点进行比较
int dx = beginPoint.x - endPoint.x;
int dy = beginPoint.y - endPoint.y;
if (abs(dx) > 10 || abs(dy) > 10) //判断一下在x或y轴上是否出现了移动距离
{
if (dx < 0 && abs(dx) > 10) //如果有移动距离,然后再判读一下开始与结束坐标点的差值是大于零还是小于零,从而判断移动的方向
{
log("right");
}
else if (dx > 0 && abs(dx) > 10)
{
log("left");
}
else if (dy < 0 && abs(dy) > 10)
{
log("up");
}
else
{
log("down");
}
}
}
第五步、选择启动调试,就可以在输出窗口看到打印的日志,看一下是否和你滑动的方向一致,如果一致就成功了。