精灵的纹理位置移位[cocos2d v3]

时间:2014-07-15 14:15:14

标签: cocos2d-iphone position textures ccsprite ccnode

我一直在努力解决这个问题:我有CCNode>> StateComponent和StateComponent中我有一个CCSprite作为属性,并将其添加为StateComponent中的子项。当我设置StateComponent对象的位置而不是精灵的位置时,StateComponent对象的边界框出现在正确的位置。精灵位置的默认值设置为(0,0)。精灵的边界框出现在(0,0)但精灵纹理从(0,0)移位。 我之后将StateComponent对象添加到CCScene。

也许有人可以帮我提供建议:如何设置精灵位置,使纹理和边界框出现在与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;

}

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

我设法通过几次将StateComponent位置转换为节点空间来解决问题,因为我实际上有一个类似于具有精灵的StateComponents结构的树。

感谢您的帮助! :)

--- ---编辑

这篇文章对我很有帮助,可能很有趣:http://www.koboldtouch.com/display/IDCAR/Converting+Between+Coordinate+Spaces