cocos2d Sprite contentSize Проблема - PullRequest
3 голосов
/ 10 июля 2009

Я определил спрайт, используя метод spriteWithFile, обеспечивающий 120px на 30px .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 голосов
/ 15 июля 2009

Являются ли эти линии частью класса Батут?

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

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

Вот фрагмент 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, он работает точно так же, как я ожидал.

0 голосов
/ 10 июля 2009

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

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

trampoline = [Trampoline node];
...