我想制作一个简单的SpriteKit应用程序,我可以添加“岩石”,它们会落到屏幕的底部。就像这样:http://aamukasa.fi/II-13-347。实现非常简单,但是当节点数超过100时,我会遇到巨大的性能问题。当所有块碰撞在一起时,FPS低于10。反正有没有通过良好的FPS和大约300-400块实现这种功能?
@implementation MyScene
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
/* Setup your scene here */
self.backgroundColor = [SKColor colorWithWhite:1 alpha:1];
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
self.scaleMode = SKSceneScaleModeAspectFit;
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
SKSpriteNode *rock = [[SKSpriteNode alloc] initWithColor:[SKColor blackColor] size:CGSizeMake(20,10)];
rock.position = location;
rock.name = @"rock";
rock.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rock.size];
[self addChild:rock];
}
}
-(void)update:(CFTimeInterval)currentTime {
/* Called before each frame is rendered */
}
@end
答案 0 :(得分:2)
你可能想尝试给你的岩石一个圆形的物理体。我认为它不会解决问题,但可能会增加帧速率!据我所知,圆形物理实体的性能优于矩形实体。
答案 1 :(得分:0)
您应该在设备上测试以查看实际的FPS。在模拟器中,我获得60 FPS直到达到200块砖。
然后它开始下降,但在设备上你可以获得更好的结果。
答案 2 :(得分:0)
不确定你是否还在寻找,但可以尝试这样的事情:
-(void)didSimulatePhysics
{
[self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop) {
if (node.position.y < 0)
[node removeFromParent];
}];
}
否则节点会留在内存中,FPS会加剧加班。