我在屏幕的一侧有一个滚动视图,里面装满了CCSprites,我希望能够将其中一个拖动到屏幕的主区域。我只需要找到用户开始拖动的Sprite。
我试图将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的位置?而不是将您的位置设置为(0,0),只需获取boundingBox并检查该点是否包含在其中。
当偏移应用于所有子项时,滚动视图将更新为content / boundingBox的实际位置,因此当您在屏幕上看到时,边界框将始终反映正确的位置。您可以使用drawNode在精灵周围绘制矩形来检查这一点。我通常将此作为一种调试方式,以确保我能够使用正确的尺寸和位置。
您可以通过使用每个scrollViewItem返回的boundingBox来解决您的问题。
auto bounds = sprite->getBoundingBox();
if(bounds.containsPoint(position))
{
return sprite->getName();
}