2014-07-15 54 views
0

我一直在为那个问题奋斗了几天:我有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; 

} 
+0

张贴相关的代码中添加文本,你的问题。仅基于描述,不能调试。我猜你可能会将anchorPoint从默认的0.5,0.5改为。或者,您可能没有考虑到子节点位置与其父母的位置相关,也许您需要convertToWorldSpace/convertToNodeSpace。还要注意,boundingBox是一个考虑了所有这些方面的属性,而确定边界框的自定义代码可能不是。 – LearnCocos2D

+0

感谢您的回复!我已经添加了代码。我不改变定位点。我所做的就是设置节点(StateComponent)的位置。我也尝试convertToWorldCoordinates,反之亦然,但随机设置纹理...不幸的是,我不能添加屏幕截图... – UnhappyStudent

+0

如果我直接添加精灵到场景(但它仍然是StateComponent的属性),那么它显示在正确的位置。 – UnhappyStudent

回答

1

您是否尝试将节点的内容大小设置为Sprite内容大小?

-(instancetype) initWithGestureStatewithSprite:(CCSprite*) sprite andPosition: (CGPoint) spritePosition RelativeAngle:(float) angle { 
... 
self.contentSize = sprite.contentSize; 
... 
+0

嗨奥列格,我已经这样做:)感谢您的建议! – UnhappyStudent