Ios 精灵套件设备在第一次碰撞时滞后

Ios 精灵套件设备在第一次碰撞时滞后,ios,opengl-es,sprite-kit,collision,lag,Ios,Opengl Es,Sprite Kit,Collision,Lag,我有一个问题,我的精灵套件游戏只有在主角和任何其他精灵之间发生第一次碰撞时才会延迟。第一次碰撞发生后,每隔一次碰撞都是平滑的,并以60.0 fps的速度运行。奇怪的是,当第一次碰撞时,fps只下降到49-51,但实际的比赛冻结了半秒。这也不是设置滞后的问题,因为无论我等待启动多长时间,都会出现这种情况。有人知道问题是什么吗 -(void)checkForCollisions { if (_invincible) return; [self enumerateChildNodesWithName

我有一个问题,我的精灵套件游戏只有在主角和任何其他精灵之间发生第一次碰撞时才会延迟。第一次碰撞发生后,每隔一次碰撞都是平滑的,并以60.0 fps的速度运行。奇怪的是,当第一次碰撞时,fps只下降到49-51,但实际的比赛冻结了半秒。这也不是设置滞后的问题,因为无论我等待启动多长时间,都会出现这种情况。有人知道问题是什么吗

-(void)checkForCollisions {

if (_invincible) return;
[self enumerateChildNodesWithName:@"enemy"
                       usingBlock:^(SKNode *node, BOOL *stop){
                           SKSpriteNode *enemy = (SKSpriteNode *)node;
                           CGRect smallerFrame = CGRectInset(enemy.frame, 22, 22);
                           if (CGRectIntersectsRect(smallerFrame, _sloth.frame)) {

                               [enemy removeFromParent];

                               [self runAction:[SKAction playSoundFileNamed:@"eagle.wav" waitForCompletion:NO]];
                               NSString *burstPath =
                               [[NSBundle mainBundle] pathForResource:@"ExplosionParticle" ofType:@"sks"];

                               SKEmitterNode *burstEmitter =
                               [NSKeyedUnarchiver unarchiveObjectWithFile:burstPath];

                               burstEmitter.position = _sloth.position;
                               [self addChild:burstEmitter];

                               [self changeInLives:-1];

                               _invincible = YES;
                               float blinkTimes = 10;
                               float blinkDuration = 3.0;
                               SKAction *blinkAction =
                               [SKAction customActionWithDuration:blinkDuration
                                                      actionBlock:
                                ^(SKNode *node, CGFloat elapsedTime) {
                                    float slice = blinkDuration / blinkTimes;
                                    float remainder = fmodf(elapsedTime, slice);
                                    node.hidden = remainder > slice / 2;
                                }];
                               SKAction *sequence = [SKAction sequence:@[blinkAction, [SKAction runBlock:^{
                                   _sloth.hidden = NO;
                                   _invincible = NO;
                               }]]];
                               [_sloth runAction:sequence];

                           }
                       }];

}
延迟没有链接到发射器节点,因为每当游戏被注释掉时,仍然会延迟。 如果您需要任何其他信息,请告诉我。提前谢谢! 以下是my Instruments跟踪文件的链接:
如果查看跟踪文件,请注意,当时间分析器达到118%时会发生冲突。

正如Cocos提到的,可能是声音文件的初始加载导致了一次延迟

在您的实现中添加声音操作:

SKAction *eagleSound;
在init方法中添加以下内容:

eagleSound = [SKAction playSoundFileNamed:@"eagle.wav" waitForCompletion:NO];
然后,无论何时需要播放声音,请使用以下命令:

[self runAction:eagleSound];

可能正在播放音频文件,它需要在第一个plaThanks上被放入内存!很好!