我一直在为那个问题奋斗了几天:我有CCNode >> StateComponent和StateComponent中有一个CCSprite作为属性,并将它作为子组件添加到StateComponent中。当我设置StateComponent对象的位置而不是Sprite的位置时,StateComponent对象的边界框出现在正确的位置。精灵位置的默认值在(0,0)上设置。精灵的边界框出现在(0,0),但精灵纹理从(0,0)开始移动。 之后我将StateComponent对象添加到CCScene中。精灵的纹理位置发生了变化[cocos2d v3]
也许有人可以帮助我建议:我如何设置精灵位置,使纹理和边界框出现在与StateComponent对象相同的位置?稍后,我想检测节点(精灵)是否有触摸,然后用精灵旋转节点。
任何帮助将非常感谢!
@interface StateComponent : CCNode {
}
@end
@implementation StateComponent
-(instancetype) initWithGestureStatewithSprite:(CCSprite*) sprite andPosition: (CGPoint) spritePosition RelativeAngle:(float) angle {
self = [super init];
if (!self) {
return nil;
}
self.sprite = sprite;
self.relativeAngle = angle;
self.position = spritePosition;
[self addChild:sprite];
return self;
}
@end
@interface StateViewScene : CCScene {
}
@end
@implementation StateViewScene
-(id) init {
self = [super init];
if (!self) {
return nil;
}
StateComponent * body = [[StateComponent alloc] initWithGestureStatewithSprite [CCSprite spriteWithImageNamed:@"body.png"] andPosition: CGPointMake(512,384) RelativeAngle:0];
[self addChild:body];
return self;
}
张贴相关的代码中添加文本,你的问题。仅基于描述,不能调试。我猜你可能会将anchorPoint从默认的0.5,0.5改为。或者,您可能没有考虑到子节点位置与其父母的位置相关,也许您需要convertToWorldSpace/convertToNodeSpace。还要注意,boundingBox是一个考虑了所有这些方面的属性,而确定边界框的自定义代码可能不是。 – LearnCocos2D
感谢您的回复!我已经添加了代码。我不改变定位点。我所做的就是设置节点(StateComponent)的位置。我也尝试convertToWorldCoordinates,反之亦然,但随机设置纹理...不幸的是,我不能添加屏幕截图... – UnhappyStudent
如果我直接添加精灵到场景(但它仍然是StateComponent的属性),那么它显示在正确的位置。 – UnhappyStudent