gpt4 book ai didi

ios - Sprite Kit 设备在第一次碰撞时滞后

转载 作者:行者123 更新时间:2023-11-29 12:46:57 25 4
gpt4 key购买 nike

我有一个问题,我的 Sprite Kit 游戏只有在主要角色和任何其他 Sprite 之间发生第一次碰撞时才会滞后。第一次碰撞发生后,其他所有碰撞都是平滑的,并以 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];

}
}];

}

滞后与发射器节点无关,因为游戏在被注释掉时仍然滞后。如果您需要任何其他信息,请告诉我。提前致谢!这是我的仪器跟踪文件的链接:https://www.dropbox.com/sh/xvd1xdti37d76au/ySL4UaHuOS如果您查看跟踪文件,请注意当 Time Profiler 达到 118% 时会发生冲突。

最佳答案

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

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

SKAction *eagleSound;

在你的初始化方法中添加:

eagleSound = [SKAction playSoundFileNamed:@"eagle.wav" waitForCompletion:NO];

然后每当你需要播放声音时,使用这个:

[self runAction:eagleSound];

关于ios - Sprite Kit 设备在第一次碰撞时滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com