0

我试图阻止发射器在我的 Sprite Kit 项目中无休止地播放。Lifetime 设置设置为Start=1并且End=0它显示了我想要的正确结果(仅发出一次)。

当我在更新方法中调用它时,问题就来了,它不断地发射,我尝试使用removeFromParentremoveAllAction没有运气。你能帮我解决这里的问题吗?

-(void)update:(NSTimeInterval)currentTime {

    [self updateheartPositionFromMotionManager];
    [self matchIt];

    if ( _heart.position.x == 512 && _heart.position.y == 484 ){
        SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:
                  [[NSBundle mainBundle] pathForResource:@"sparkly" ofType:@"sks"]];

        emitter.position = CGPointMake(self.frame.size.width/2,               
                                       CGRectGetMidY(self.frame)+100);;
        emitter.name = @"exhaust";
        emitter.targetNode =_heart;
        [self addChild:emitter];

    }else{

        [self removeFromParent];
    }
}
4

1 回答 1

0

//第 1 步取一个全局变量 @property BOOL sparklyAdded; 在你的 .h 文件中

在 .m 文件的 init 或实例方法中

sparklyAdded=假;

-(无效)粒子添加{

}

-(无效)更新:(NSTimeInterval)当前时间{

  [self updateheartPositionFromMotionManager];
  [self matchIt];

 if (( _heart.position.x>= 512 && _heart.position.y=< 484 ) && !sparklyAdded){
     SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:
              [[NSBundle mainBundle] pathForResource:@"sparkly" ofType:@"sks"]];

     emitter.position = CGPointMake(self.frame.size.width/2,               
                                   CGRectGetMidY(self.frame)+100);;
     emitter.name = @"exhaust";
     emitter.targetNode =_heart;
     [self addChild:emitter];
     sparklyAdded=TRUE;

  }else{

    [self removeEffect];
 }

}

-(void) removeEffect

{ [self enumerateChildNodesWithName:@"exhaust" usingBlock:^(SKNode *node, BOOL *stop) {

    [node removeAllActions];
    [node removeFromParent];
     sparklyAdded=FALSE;
}];

}

//在添加粒子时记住几个大腿 1) 它们是昂贵的 cpu 调用,所以只在更新循环中添加和删除它们一次

于 2014-06-09T12:24:45.863 回答