我正在尝试使用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移动到屏幕上应该添加另一个子节点的点时,它会崩溃......
答案 0 :(得分:2)
您没有在groundGrass
方法中创建新的moveGroundGrass
。您需要像在initWithSize:
在Obj-C中你可以创建一个这样的对象:object *name [object new];
其中object
可以是f.e.的UIView。
如果您想要轻松访问您正在创建的对象,可以将它们添加到NSMutableArray
中,但如果您只想添加它们然后对它们不做任何操作(不推荐),您可以创建它然后将其添加到视图中。