1

我在屏幕的一侧有一个滚动视图,里面装满了 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 "";
}
4

1 回答 1

0

第一个问题是你为什么要改变boundingBox的位置?而不是将您的位置设置为 (0, 0),只需获取 boundingBox 并检查该点是否包含在其中。

当偏移量应用于所有子项时,滚动视图将更新到内容/边界框的实际位置,因此边界框将始终反映您在屏幕上看到的正确位置。您可以通过使用 drawNode 在精灵周围绘制矩形来检查这一点。我通常使用它作为一种调试方式,以确保我使用正确的尺寸和位置。

您可以通过使用从每个 scrollViewItem 返回的 boundingBox 来解决您的问题。

auto bounds = sprite->getBoundingBox();

if(bounds.containsPoint(position))
{
   return sprite->getName();
}
于 2015-10-05T08:34:06.383 回答