Not sure if it makes a difference in your case, but I notice you're swallowing touches - I think that means if one objects claims a touch, the touch won't be dispatched to any other objects. Maybe try it with swallowing set to no?
Also, you could reduce/eliminate the redundant checks in my method by only checking the next rect in the queue. Sort of like:
- (void)ccTouchMoved... {
if (CGRectContainsPoint(_rectArray[_currentRectIndex], touchLocation)) {
NSLog(@"We just hit the next point in our circle");
_currentRectIndex++;
}
}
Obviously you'd have to make sure you don't go out of bounds in the array. And maybe I'm missing the point of the problem altogether :)
EDIT - Actually, I just thought of something. Turning swallowing off won't fix your problem because ccTouchBegan only gets called once, and if the touch falls within one rect, every other rect is going to reject the touch because it doesn't contain it. Once the touch is rejected, there's no way to get it back.
The only way I can see having each rect looking after their own touch is to return yes in ccTouchBegan regardless of whether or not the rect contains the touch (probably still need to turn off swallowing) and do your check in ccTouchMoved...
But I would think that would be even more expensive than having one node receive the touch and do the checks itself. Not sure about that though.