尝试从if语句添加SKNode时,应用程序崩溃

时间:2014-05-03 18:41:54

标签: ios objective-c sprite-kit sknode

我正在尝试使用NSTimer在静止背景上创建移动背景,它可以正常工作,直到我调用命令添加另一个孩子。这是我得到的错误。

  • Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attemped to add a SKNode which already has a parent: <SKSpriteNode> name:'(null)' texture:[<SKTexture> 'groundGrass.png' (53 x 71)] position:{159, 35} size:{808, 71}

以下是我的代码:

-(void)moveGroundGrass{

groundGrass.position = CGPointMake(groundGrass.position.x -1, groundGrass.position.y);

if (groundGrass.position.x < 160){

    [self addChild:groundGrass];
}

以下是其余部分:

-(id)initWithSize:(CGSize)size {

if (self = [super initWithSize:size]) {
    /* Setup your scene here */

    SKSpriteNode *background = [SKSpriteNode spriteNodeWithImageNamed:@"background"];
    background.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame));

    background.xScale = 0.9;
    background.yScale = 1.1837f;


    [self addChild:background];


    groundGrass = [SKSpriteNode spriteNodeWithImageNamed:@"groundGrass"];

    groundGrass.position = CGPointMake (404, 35);

    [self addChild:groundGrass];

    moveGround = [NSTimer scheduledTimerWithTimeInterval:0.01f target:self selector:@selector(moveGroundGrass) userInfo:nil repeats:YES];


       }
return self;

}

当groundGrass.png移动到屏幕上应该添加另一个子节点的点时,它会崩溃......

1 个答案:

答案 0 :(得分:2)

您没有在groundGrass方法中创建新的moveGroundGrass。您需要像在initWithSize:

中创建的那样创建一个新的

在Obj-C中你可以创建一个这样的对象:object *name [object new];其中object可以是f.e.的UIView。

如果您想要轻松访问您正在创建的对象,可以将它们添加到NSMutableArray中,但如果您只想添加它们然后对它们不做任何操作(不推荐),您可以创建它然后将其添加到视图中。