为什么这个图像会再次出现? Objective-C的

时间:2014-04-01 18:54:12

标签: ios iphone objective-c sprite-kit

我已经设置了一个纹理,使其在场景上方生成,然后慢慢向下滚动屏幕以获得风景。滚动和出现纹理很好。他们的工作方式我想要的。问题是它在离开场景后重新出现,即使我已将其设置为从父项中删除。这是代码:

该项目的产生:

-(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];
        }

    }];

}

我不明白为什么该项目重新出现在场景的顶部并重新开始滚动?有什么原因吗?我该如何解决?

感谢。

1 个答案:

答案 0 :(得分:2)

两个想法:

1)在-(void)initalizingScrollingBackground中放置一个断点,以便应用程序暂停。然后查看调用堆栈,了解如何触发对此方法的调用。

2)不要在子对象上调用removeFromParent,而是尝试从父对象启动该操作。例如:[bg removeChild: tumbleWeed];我在其他项目中看到过从孩子那里拨打电话可能会出现问题的情况,所以我采用了始终让父母添加/删除操作的做法。

祝你好运!希望这会有所帮助......