我现在正在创建一个点击游戏。因此,目标 Sprite 是随机颜色是创建一个 Sprite。我想从随机放置的 8 x 8 精灵中擦除与目标颜色相同的精灵。但是,当用户触摸精灵时,如果精灵与目标精灵的颜色相同,我将无法获得。
是否可以确定是否点击了相同的颜色精灵和用户目标我该怎么做?
首先,您需要找到被点击的精灵。
如果你只为那个游戏精灵制作一个图层并将它们放在那个图层上,那么它会变得更容易。
像这样
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 的用户数据成员作为颜色标签并比较它而不是比较颜色本身。