我已经设置了一个纹理,使其在场景上方生成,然后慢慢向下滚动屏幕以获得风景。滚动和出现纹理很好。他们的工作方式我想要的。问题是它在离开场景后重新出现,即使我已将其设置为从父项中删除。这是代码:
该项目的产生:
-(void)initalizingScrollingBackground
{
for (int i = 0; i < 2; i++) {
SKSpriteNode *tumbleWeed = [SKSpriteNode spriteNodeWithTexture:[SKTexture textureWithImageNamed:@"tumbleWeed.png"] size:CGSizeMake(40, 40)];
tumbleWeed.position = CGPointMake(160, -10);
tumbleWeed.zPosition = 1.0;
tumbleWeed.name = @"tumbleWeed";
[bg addChild:tumbleWeed];
}
}
移动项目,并在屏幕关闭时将其删除:
-(void)moveItems {
[self enumerateChildNodesWithName:@"tumbleWeed" usingBlock:^(SKNode *node, BOOL *stop) {
SKSpriteNode * tumbleWeed = (SKSpriteNode *)node;
CGPoint bgVelocity = CGPointMake(0, -BG_VELOCITY);
CGPoint amtToMove = CGPointMultiplyScalar(bgVelocity,_dt);
tumbleWeed = CGPointAdd(amtToMove, tumbleWeed.position);
if (tumbleWeed.position.y > self.size.height + 10) {
[tumbleWeed removeFromParent];
}
}];
}
我不明白为什么该项目重新出现在场景的顶部并重新开始滚动?有什么原因吗?我该如何解决?
感谢。
答案 0 :(得分:2)
两个想法:
1)在-(void)initalizingScrollingBackground
中放置一个断点,以便应用程序暂停。然后查看调用堆栈,了解如何触发对此方法的调用。
2)不要在子对象上调用removeFromParent
,而是尝试从父对象启动该操作。例如:[bg removeChild: tumbleWeed];
我在其他项目中看到过从孩子那里拨打电话可能会出现问题的情况,所以我采用了始终让父母添加/删除操作的做法。