0

我现在正在创建一个点击游戏。因此,目标 Sprite 是随机颜色是创建一个 Sprite。我想从随机放置的 8 x 8 精灵中擦除与目标颜色相同的精灵。但是,当用户触摸精灵时,如果精灵与目标精灵的颜色相同,我将无法获得。

是否可以确定是否点击了相同的颜色精灵和用户目标我该怎么做?

4

1 回答 1

0

首先,您需要找到被点击的精灵。

如果你只为那个游戏精灵制作一个图层并将它们放在那个图层上,那么它会变得更容易。

像这样

CCSprite * GameScene::findSpriteWithPoint(CCPoint pos)
{
    CCArray *children = m_pGameLayer->getChildren(); 
    //make sure that there's only game sprites on the m_pGameLayer
    CCSprite *child;

    CCSprite *found = NULL;

    if (children) {
        CCARRAY_FOREACH(children, child)
        {
            if (child->boundingBox().containsPoint(pos) == true) {
                found = child;
                break;
            }
        }
    }

    return found;
}

此函数将返回找到的精灵或 NULL。

请注意,在调用此函数之前,您需要将触摸位置转换为 GL 位置。

像下面

CCPoint location = touch->getLocationInView();

location = CCDirector::sharedDirector()->convertToGL(location);
CCSprite * found = findSpriteWithPoint(location);

其次,只需将找到的精灵与目标精灵的颜色进行比较。

if (found != NULL) {
    ccColor3B color = found->getColor();
    ccColor3B target = m_pTarget->getColor();

    if (color.r == target.r && color.g == target.g && color.b == target.b ) {
        //The color is same
    }
}

比较方法仅在您使用 setColor 函数制作彩色精灵时才有效。

所以,如果你想使用原生颜色的精灵,使用 CCSprite 的用户数据成员作为颜色标签并比较它而不是比较颜色本身。

于 2013-09-09T05:15:25.063 回答