在3.x的程序中,在移动精灵的时候,如果手指移动快了,精灵就跟不上手指的节奏,直接导致手指在精灵外面,精灵就不会移动了,大家有没有这种情况!看了网上有个帖子是这样解决的,
xxxxxxxx::onTouchMoved(Touch* touch, Event* event)
{
auto target = static_cast<Sprite*>(event->getCurrentTarget());//获取当前的触摸目标
Point locationInNode = target->convertToNodeSpace(touch->getLocation());//将本地坐标系转化为精灵坐标系(以精灵的左下角作为坐标原点)
Point oldTouchLocation = target->convertToNodeSpace(touch->getPreviousLocation());//上次touch的点
Point targetPosition = target->getPosition();
Size s = target->getContentSize();//获取精灵的文本尺寸大小
Rect rect = Rect(0, 0, s.width, s.height);//获取精灵的矩形框(起始点为精灵的左下角)
//if (rect.containsPoint(locationInNode))//判断触摸点是否在精灵的矩形框上,如果移动快了 指头超出精灵 精灵就会停止响应事件
if (rect.containsPoint(oldTouchLocation))//判断上次触摸点是否在精灵的矩形框上
{
log(“Peoples::onTouchMoved,%d”, target->getTag());
target->setPosition(targetPosition + touch->getDelta()); //移动到拖动点
}
}
大家还有没有更好的方法?
附上帖子地址http://www.eoeandroid.com/forum.php?mod=viewthread&tid=495736
在onTouchBegan方法里判断是否点击在rect里,是则返回true,不是就返回false,不在onTouchMoved里判断
你那是点击事件,这个点击移动事件,不是同一个,好么?
我说的是点击移动啊,点击移动首先在onTouchBegan里判断是否在rect里,然后在onTouchMoved里只用
local function onTouchMoved(touch, event)
local target = event:getCurrentTarget()
local posX,posY = target:getPosition()
local delta = touch:getDelta()
target:setPosition(cc.p(posX + delta.x, posY + delta.y))
end
test里面有