您的位置:首页 > 移动开发 > Cocos引擎

Cocos2D-X学习12:交互功能——多点触控的实现

2016-11-29 22:16 218 查看
上一节对单点触控进行是学习,而在实际使用中,还经常用到多点触控,下面来学习多点触控。

在单点触控的基础上,学习多点触控还是比较简单的,在实际使用中一般已两点触控居多,其最常见的功能是放大、缩小等。

下面为一个多点触控的示例:

auto myListener = EventListenerTouchAllAtOnce::create();
myListener->onTouchesBegan = [=](const std::vector<Touch*>& touches, Event *unused_event)
{
for (auto &item : touches)
{
auto* sprite = Sprite::create("sprite.png");
sprite->setPosition(item->getLocation());
sprite->setOpacity(120);
sprite->setScale(0.2f);
this->addChild(sprite);
}
};

myListener->onTouchesMoved = [=](const std::vector<Touch*>& touches, Event *unused_event)
{
for (auto &item : touches)
{
int id = item->getID();
auto array = this->getChildren();
auto sprite = array.at(id);
auto point = item->getLocation();
sprite->setPosition(point);
CCLOG("id=%d\tx=%f\ty=%f", id, point.x, point.y);
}
};

myListener->onTouchesEnded = [=](const std::vector<Touch*>& touches, Event *unused_event)
{
for (auto &item : touches)
{
int id = item->getID();
auto array = this->getChildren();
auto sprite = array.at(id);
sprite->setOpacity(255);
auto point = item->getLocation();
sprite->setPosition(point);
CCLOG("id=%d\tx=%f\ty=%f", id, point.x, point.y);
}
};

_eventDispatcher->addEventListenerWithSceneGraphPriority(myListener, this);


可以看到多点触控实际就是使用了另一个触摸监听器EventListenerTouchAllAtOnce,使用方法和单点触摸监听器 EventListenerTouchOneByOne相似,需要对其响应类型进行定义:

onTouchesBegan对用户的触摸到屏幕的操作进行处理, 这里的处理是生成精灵(羊驼图像),然后加入到场景中。

onTouchesMoved对用户在操作对象上的拖动操作进行处理,通过getID获取相应的编号,来确定所使用的是那一次触摸(判断多点触摸中的单个触摸),然后根据这个编码获得当前场景的子节点,从而得到对应的羊驼图像进行位置的变换。

onTouchesEnded对用户触摸结束时进行处理,同上,获得触摸的ID后,找到对应的羊驼图像,将其透明度恢复为完全不透明。

其中的for循环使用了C++11的新特性,其功能是对其判断条件中的数组进行遍历。

这里电脑无法实现多点触控,因此需要在手机上使用,效果图如下:



三个手指同时触摸产生了三只羊驼,并可以改变其位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐