2013-12-07 1 views
2

Я пытаюсь понять, как создать этот ряд спрайтов. Мой входной спрайт исходит от Texture в TextureAtlas и не назначен родительскому. Теперь каждый раз, когда я запускаю код под журналом ошибок, «Attemped для добавления SKNode, у которого уже есть родительский элемент». Это происходит после добавления первого Sprite в цикл for.Добавление нескольких детей в SKSpritenode

Я попробовал поставить ряд вместе с Array. Это работает, пока я не хочу перебирать массив в моей основной сцене и добавлять детей. Появится тот же журнал ошибок.

Я думаю, что решение, вероятно, довольно просто, хотя я не могу понять это в течение некоторого времени.

-(SKSpriteNode*)createRowFromSprite:(SKSpriteNode*)SpriteName{ 

    tempSprite = [SKSpriteNode new]; 
    SKSpriteNode *row = [SKSpriteNode new]; 
    int x = 0 ; 

    for (int i = 0; i < 5; i++) { 

     tempSprite = (SKSpriteNode*)SpriteName; 
     tempSprite.position = CGPointMake(x,0); 
     [row addChild:tempSprite]; 
     x += 16; 
    } 

return row; 

} 

ответ

1

, конечно, у вас есть ошибка. вы передали спрайт в метод и пытались добавить его более одного раза (и с утечкой памяти, потому что вы фактически никогда не используете этот объект tempSprite = [SKSpriteNode new];). То, что вы должны сделать, это передать NSString с именем файла в ваш метод и создать новый спрайт из этого файла на каждой итерации цикла. Это, вероятно, выглядеть следующим образом (я не очень хорошо в SpriteKit, но я надеюсь, что вы получите идею):

-(SKSpriteNode*)createRowFromFile:(NSString *)filename{ 

SKSpriteNode * tempSprite; 
SKSpriteNode *row = [SKSpriteNode new]; 
int x = 0 ; 

for (int i = 0; i < 5; i++) { 

    tempSprite = [[[SKSpriteNode alloc] initWithImageNamed:filename] autorelease]; 
    tempSprite.position = CGPointMake(x,0); 
    [row addChild:tempSprite]; 
    x += 16; 
} 

return row; 

} 

и не забудьте освободить вас грести объект после того, как вы добавили его. Если вы, конечно, не используете ARC

+0

Спасибо! Я понял это с вашим объяснением. – keptn