cocos2d 精灵 contentSize 问题

3

我使用spriteWithFile方法定义了一个精灵,提供了一个120像素乘30像素的.png文件。

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吗?

如有帮助,将不胜感激。

谢谢,

Rich

2个回答

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的override之前,从另一个类中请求它会给我返回同样的结果。现在,我告诉它返回textLabel的content size,它就像我期望的那样工作了。


0
我假设Trampoline继承自Sprite,而Sprite又继承自Node。你正在用[Trampoline node]覆盖trampoline,这将创建一个节点...但是Trampoline的实现是否重写了node方法,以便将你的精灵文件初始化为Trampoline节点?
我认为你只是从这行代码中得到一个空的Node类。
trampoline = [Trampoline node];

蹦床是Sprite的子类。行trampoline = [Trampoline node]正在初始化我的对象。蹦床不为空,因为它已经设置了位置,并在我的屏幕上显示图像。 - Rich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接