cocos2d Sprite contentSize问题

时间:2009-07-10 17:46:51

标签: iphone cocos2d-iphone sprite

我使用spriteWithFile方法定义了一个sprite,提供了120px乘30px .p​​ng

Sprite *trampoline = [Sprite spriteWithFile:@"trampoline.png"];     
[self addChild:trampoline];

当我将它添加到我的图层并定位它时,它就是我希望它出现在屏幕上的位置。

trampoline = [Trampoline node];
trampoline.position = ccp(160,15);
[self addChild:trampoline z:0 tag:1];

但是,似乎没有contentSize。以下NSLog语句:

NSLog(@"Content Size x:%f, y:%f", trampoline.contentSize.width,trampoline.contentSize.height);

给出以下读出:

2009-07-10 18:24:06.385 TouchSprite[3251:20b] Content Size x:0.000000, y:0.000000

我错过了什么吗?不应该是120.000000乘30.000000

非常感谢任何帮助。

此致

2 个答案:

答案 0 :(得分:3)

这些行是Trampoline类的一部分吗?

Sprite *trampoline = [Sprite spriteWithFile:@"trampoline.png"];
[self addChild:trampoline];

根据我对cocos2d的有限经验,Sprite的contentSize似乎只适用于实际属于Sprite的内容,而不适用于该Sprite的所有子项。因此,在上面的示例中,在日志语句中请求contentSize将不起作用,因为没有任何内容添加到Trampoline节点。但是,如果要覆盖Trampoline类中的contentSize方法以返回实际加载图形的Sprite的contentSize,那应该有效。

这是我正在使用的游戏中使用的Sprite的片段,它说明了我在说什么:

- (id) init
{
self = [super init];

if (self != nil)
{       
    self.textLabel = [Label labelWithString:@"*TEXT*"
                                   fontName:@"Helvetica"
                                   fontSize:18];

    [textLabel setRGB:0 :0 :0];

    textLabel.transformAnchor = CGPointZero;
    textLabel.position = CGPointZero;
    self.transformAnchor = CGPointZero;

    [self addChild:textLabel];
}

return self;
}
//

- (CGSize) contentSize
{
return textLabel.contentSize;
}

这来自一个扩展Sprite的类。在我为contentSize添加覆盖之前,从另一个类中请求它会给我看到相同的结果。既然我告诉它返回textLabel的内容大小,它就像我期望的那样工作。

答案 1 :(得分:0)

我假设Trampoline继承自Sprite,后者继承自Node。您正在用[Trampoline节点]覆盖蹦床创建一个节点......但Trampoline实现是否覆盖节点方法以将精灵文件初始化为Trampoline节点?

我认为你刚从行中获得一个空的Node类:

trampoline = [Trampoline node];