Come una domanda di follow-on alla mia precedente interrogazione su displaying the anchor point, ho sottoclasse CCSprite e ha cambiato il suo metodo draw come segue:Come posso visualizzare il riquadro di delimitazione per un CCNode in cocos2d?
[super draw];
ccDrawColor4F(0, 1, 0, 1);
ccDrawCircle(self.anchorPointInPoints, 20, 0, 8, YES);
Questa grande opera. Per il credito supplementare, ho aggiunto il seguente per visualizzare il relativo riquadro di selezione:
CGRect bb = self.boundingBox;
CGPoint vertices[4] = {
[self convertToNodeSpace:ccp(bb.origin.x, bb.origin.y)],
[self convertToNodeSpace:ccp(bb.origin.x + bb.size.width, bb.origin.y)],
[self convertToNodeSpace:ccp(bb.origin.x + bb.size.width, bb.origin.y + bb.size.height)],
[self convertToNodeSpace:ccp(bb.origin.x, bb.origin.y + bb.size.height)],
};
ccDrawPoly(vertices, 4, YES);
Questo funziona anche grande, fino a quando ho Reparent un folletto:
CGPoint oldPosition = [sprite convertToWorldSpace:sprite.position];
[sprite removeFromParentAndCleanup:NO];
[parentSprite addChild:sprite];
sprite.position = [sprite convertToNodeSpace:oldPosition];
lo sprite di ora nella posizione corretta e il suo punto di ancoraggio disegna dove dovrebbe, ma il riquadro di selezione si disegna nel posto sbagliato. Che cosa sto facendo di sbagliato?
Grazie! Molto illuminante. Tutto risolto ora. In realtà ho bisogno di sottoclasse CCSprite poiché voglio attivare selettivamente i bounding box, ma prendere a prestito il codice da CC_SPRITE_DEBUG_DRAW e disegnare il poly formato dai vertici di 'quad_.tl.vertices' fa esattamente quello di cui ho bisogno. – mobopro