【发布时间】:2014-06-11 18:19:46
【问题描述】:
我正在开发一个 sprite-kit 游戏,其中节点在屏幕最低点下方生成,并且重力设置为让它们漂浮到屏幕顶部。一切正常,但它很快就开始减慢 FPS,最终滞后和故障变得非常缓慢。我认为解决这个问题的方法是在它们超过一个点后从父节点中删除节点,这是我在更新中使用的代码:
-(void)update:(CFTimeInterval)currentTime {
if (_bubble1.position.y > CGRectGetMaxX(self.frame)+40) {
[self removeFromParent];
}
}
如果需要,这就是我在initWithSize 方法下方生成气泡的方式:
-(void)didMoveToView:(SKView *)view {
[self performSelector:@selector(spawnBubbles) withObject:nil afterDelay:1.0];
[self performSelector:@selector(spawnBubbles1) withObject:nil afterDelay:1.5];
}
-(void)spawnBubbles {
randomPosition = arc4random() %260*DoubleIfIpad;
randomPosition = randomPosition + 20*DoubleIfIpad;
randomNumber = arc4random() %7;
randomNumber = randomNumber + 1;
myColorArray = [[NSArray alloc] initWithObjects:colorCombo1, colorCombo2, colorCombo3, colorCombo4, colorCombo5, colorCombo6, colorCombo7, colorCombo8, nil];
myRandomColor = [myColorArray objectAtIndex:randomNumber];
_bubble1 = [SKShapeNode node];
[_bubble1 setPath:CGPathCreateWithEllipseInRect(CGRectMake(-25*DoubleIfIpad, -25*DoubleIfIpad, 50*DoubleIfIpad, 50*DoubleIfIpad), nil)];
_bubble1.strokeColor = _bubble1.fillColor = myRandomColor;
_bubble1.position = CGPointMake(randomPosition, CGRectGetMinY(self.frame)-60);
_bubble1.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:20];
_bubble1.physicsBody.categoryBitMask = CollisionBubble;
[self addChild:_bubble1];
[self runAction:[SKAction sequence:@[
[SKAction waitForDuration:1.0],
[SKAction performSelector:@selector(spawnBubbles) onTarget:self],
]]];
}
如何才能使节点在离开屏幕时得到妥善处理?以及如何将 FPS 保持在 60 FPS 的恒定速率?
提前致谢!!
【问题讨论】:
-
"FPS" 仅与节点数松散相关。其他因素将对此做出更多贡献。
-
真的吗?!喜欢什么@BradAllred
-
你只有一个bubble ivar,以后你需要使用一个数组来访问它们。使用您的更新代码,您将只能删除最后创建的气泡。您可以更轻松地让每个气泡运行一个自定义操作,该操作经常检查其位置并在必要时调用 removeFromParent。
标签: ios objective-c xcode sprite-kit