cocos2d Sprite contentSize Проблема

Я определил спрайт с помощью метода 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

Любая помощь будет принята с благодарностью.

С уважением,

Богатый


person Rich    schedule 10.07.2009    source источник


Ответы (2)


Эти строчки относятся к классу «Батут»?

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

Судя по моему ограниченному опыту работы с cocos2d, contentSize Sprite, кажется, применяется только к контенту, который фактически принадлежит Sprite, а не ко всем дочерним элементам этого Sprite. В результате в приведенном выше примере запрос contentSize в операторе журнала не будет работать, поскольку в узел Trampoline не добавлено никакого содержимого. Однако, если вы переопределите метод contentSize внутри своего класса Trampoline, чтобы вернуть contentSize спрайта, который фактически загрузил графику, это должно сработать.

Вот фрагмент спрайта, который я использую в игре, над которой я сейчас работаю, и который иллюстрирует то, о чем я говорю:

- (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, он работает так, как я ожидал.

person Josh Buhler    schedule 15.07.2009

Я предполагаю, что Trampoline наследуется от Sprite, который затем наследуется от Node. Вы перезаписываете батут с помощью [Узел Батут], который создает узел ... но не отменяет ли реализация Батут метод узла для инициализации вашего файла спрайта в узле Батут?

Я думаю, вы просто получаете пустой класс Node из строки:

trampoline = [Trampoline node];
person Greg    schedule 10.07.2009
comment
Батут - это подкласс Sprite. Линия trampoline = [Батутный узел] инициализирует мой объект. батут не пустой, так как он имеет установленное положение и отображает изображение на моем экране. - person Rich; 10.07.2009