Ios 音频在删除后继续播放

Ios 音频在删除后继续播放,ios,objective-c,sprite-kit,skaction,Ios,Objective C,Sprite Kit,Skaction,我不再追求这个话题,不是因为我找到了解决办法。不,我没有。我认为您没有正确删除该操作。 首先创建一个变量: @implementation FooClass{ SKSpriteNode *_zombie; } 分配您的对象: -(void)createEnemy:(CGPoint)p :(NSInteger)type { _zombie = [SKSpriteNode spriteNodeWithTexture:zombieTexture]; SKAction *audioSe

我不再追求这个话题,不是因为我找到了解决办法。不,我没有。

我认为您没有正确删除该操作。 首先创建一个变量:

@implementation FooClass{
SKSpriteNode *_zombie;
}
分配您的对象:

-(void)createEnemy:(CGPoint)p :(NSInteger)type {
    _zombie = [SKSpriteNode spriteNodeWithTexture:zombieTexture];
    SKAction *audioSequence = [SKActionsequence:@[waitAudio,gameLoader.actionCryingAudio]];
    [_zombie runAction:[SKAction repeatActionForever:audioSequence] withKey:@"zombieCrying"];
}
通过调用此方法删除声音:

- (void) stopZombieCrying{
[_zombie removeActionForKey:@"zombieCrying"];
}

当然,这只有在您有一个实例变量可以调用时才可用。

您可以尝试以下方法:

-(void)makeZombieCry:(SKSpriteNode*)zombie
{
    SKAction *waitAudio = [SKAction waitForDuration:waitFloat];
    SKAction *audioSequence = [SKAction sequence:@[waitAudio,gameLoader.actionCryingAudio]];
    SKAction *sequence = [SKAction sequence:@[waitAudio, audioSequence]];

    [zombie runAction:sequence completion:^{
        [self makeZombieCry:zombie];
    }];
}

然后在-create敌军方法中调用-makeZombieCry

尝试使用[gameLoader.actionCryingAudio copy]啊哈。。。谢谢我试试看。啊。。。僵尸带着副本一直哭。你能发布gameLoader.actionCryingAudio代码吗。这可能是相关的。当然。。。我已经更新了主题。谢谢。但是为什么我要把一个现有的方法分成三个呢?单独的方法只会增加一个更好的设计。干得好。我已经减少了方法的数量。现在音频部分被分离,并在完成时调用自己。因此,删除该操作应该有效。这还有一个额外的好处,那就是叫声之间的等待时间可变。1。将一个方法分成两个或三个并不能解决问题。=>F使用运行操作完成并不能解决任何问题。=>D3。请阅读主题的标题。4.请别管我,冷静点。我想你还没有真正尝试过实现这一点。重点不是将代码分离为方法,而是实现repeatActionForever的另一种方法。我猜您对抽象没有任何欣赏,因为您的代码目前正在运行,所以不会对实例化对象调用remove,因为它只存在于该方法中。您必须将变量*zombie分配给实例变量,或者您正在调用stop方法来处理一些甚至没有实例化的对象。我担心我关于执行“许多操作,例如使用键删除操作”的陈述从一开始就存在。我可以看到另一个问题,如果您已将局部变量或属性声明为SKSpriteNode*zombie;在类中,并在该对象上调用stop,而不是在方法中调用磨损对象的stop。另一方面,如果您有一个属性/变量名SKSNode*\u zombie;然后您应该得到一个警告,说隐式声明,您正在隐藏一个实例变量或类似的东西。我记不起xcode是怎么说的了,但就是这么说的。