3

「岩」を追加できるシンプルな 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
4

3 に答える 3

2

岩に円形の物理体を与えたいと思うかもしれません。問題が解決するとは思いませんが、フレームレートが少し上がるかもしれません! 私が理解している限り、円形の物理体は長方形のものよりもパフォーマンスが優れています。

于 2013-09-24T05:38:18.947 に答える
0

実際の FPS を確認するには、デバイスでテストする必要があります。シミュレーターでは、200 個のブリックに到達するまで 60 FPS が得られます。

その後、ドロップし始めますが、デバイスではより良い結果が得られます.

于 2013-10-05T17:45:04.540 に答える
0

あなたがまだ探しているかどうかはわかりませんが、次のようなことを試すことができます:

-(void)didSimulatePhysics
{
    [self enumerateChildNodesWithName:@"rock" usingBlock:^(SKNode *node, BOOL *stop) {
        if (node.position.y < 0)
            [node removeFromParent];
    }];
}

そうしないと、ノードがメモリに残り、FPS が時間の経過とともに悪化します。

于 2014-02-05T08:02:37.450 に答える