今、タップゲームを作っています。ということで、ターゲットスプライトはランダムカラーで1つのスプライトを作成。ランダムに配置された8×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 のユーザー データ メンバーをカラー タグとして使用して比較します。