У меня есть скролл-вид с одной стороны экрана, заполненный CCSprites, и я хочу иметь возможность перетаскивать один из них в основную область экрана. Мне просто нужно найти какой спрайт начал перетаскивать пользователь.
Я пытался переместить местоположение Touch в каждое координатное пространство Sprites, но числа повсюду.
положение является Touch->getStartLocationInView()
ScrollViewItems является Vector<Sprite*>
string HelloWorld::SpriteNameForPosition(cocos2d::Vec2* position)
{
for(Vector<Sprite*>::iterator iter = scrollViewItems.begin() ;iter != scrollViewItems.end();iter++)
{
Sprite* sprite = *iter;
Vec2 spriteTouchPos = sprite->convertToNodeSpace(*position);
Rect bounds = Rect(0, 0, sprite->getBoundingBox().size.width, sprite->getBoundingBox().size.height);
if(bounds.containsPoint(spriteTouchPos))
{
return names[sprite->getTag()];
}
}
return "";
}
Первый вопрос: почему вы меняете положение своего ограничительного бокса? вместо установки вашей позиции в (0, 0), просто получите boundingBox и проверьте, содержится ли точка в этом.
Представление прокрутки обновится до фактической позиции содержимого / boundingBox, когда смещение будет применено ко всем дочерним элементам, поэтому ограничивающая рамка всегда будет отражать правильную позицию, как вы видите на экране. Вы можете проверить это, используя drawNode, чтобы нарисовать прямоугольники вокруг спрайтов. Я обычно использую это как способ отладки, чтобы убедиться, что я работаю с правильными размерами и позициями.
Вы можете решить вашу проблему, просто используя boundingBox, который возвращается из каждого scrollViewItem.
auto bounds = sprite->getBoundingBox();
if(bounds.containsPoint(position))
{
return sprite->getName();
}