首先,感谢各位大神莅临本帖
最近小弟在学习coco ,我使用的3.2的版本,在mac上搭建的环境,今天学习了一下触摸事件的处理,但是小弟在模拟器上测试发现一个问题,就是我鼠标慢慢点击一个精灵拖动鼠标的时候精灵的位移能够跟上鼠标的移动,但是我快速移动鼠标的时候,当鼠标跑出精灵的范围后,就没有办法移动精灵了
也就是说 精灵的位移跟不上鼠标的移动,但是我用OC写的触摸事件的程序就不会有这个问题,控件都很粘鼠标,我看了在windows上的testcpp的程序,发现也没有这样的情况出现
下面是我的程序截图 和代码
如上图,我拖动蓝色的方块 或者图片 都是一样的效果,如果拖动图片,由于图片本身范围比较大,鼠标不容易出去,但是如果拖动小滑块,就很容易将鼠标拖动出去了
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto mylistener = EventListenerTouchOneByOne::create();
mylistener->setSwallowTouches(true);
mylistener->onTouchBegan=](Touch * touch, Event * event){
auto target = static_cast<Sprite *>(event->getCurrentTarget());
// 获取当前点击点所在相对按钮的位置坐标
Point locationInNode = target->convertToNodeSpace(touch->getLocation());
Size s = target->getContentSize();
Rect rect = Rect(0, 0, s.width, s.height);
// 点击范围判断检测
if (rect.containsPoint(locationInNode))
{
log("sprite began... x = %f, y = %f", locationInNode.x, locationInNode.y);
target->setOpacity(180);
return true;
}
return false;
};
mylistener->onTouchMoved = ](Touch * touch, Event * event){
auto target = static_cast<Sprite *>(event->getCurrentTarget());
Point locationInNode = target->convertToNodeSpace(touch->getLocation());
Size s = target->getContentSize();
Rect rect = Rect(0, 0, s.width, s.height);
if (rect.containsPoint(locationInNode))
{
target->setPosition(target->getPosition()+touch->getDelta());
//这句代码就是拖动精灵位移操作的代码
}
};