1

私はCocos2Dを使用して簡単なゲームを作成しました。このゲームでは、アニメーション化されたスプライトが無地の緑の野原を歩き回っています。

ウォーキングスプライトは64x64pxで、ジョイスティックはSneakyjoystickクラスからのものであり、緑色のフィールドは、Tiledを使用してタイルマップに作成された5〜6個の32x32ピクセルで構成されています。Tiledを使用して、50x50のタイルマップを作成しました。

20〜30 FPSを取得していますが、理由はわかりません。タイルマップのサイズを10x10タイルに減らし、最大50〜60FPSで撮影しました。どうしたらいいのかわからない?

編集:ゲームプレイレイヤーの初期化ブロックを追加しました。シミュレーターでテストしています。

-(id) init
{
    if( (self=[super init] ))
    {

        self.tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"TileMap.tmx"];
        self.background = [_tileMap layerNamed:@"Background"];
        self.meta = [_tileMap layerNamed:@"Meta"];
        self.topLayer = [_tileMap layerNamed:@"TopLayer"];

        _topLayer.visible = YES;
        _background.visible = YES;
        _meta.visible = YES;

        [self addChild:_tileMap z:-1];

        [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"male_walkcycle.plist"];

        sceneSpriteBatchNode = [CCSpriteBatchNode batchNodeWithFile:@"male_walkcycle.png"];
        [self addChild:sceneSpriteBatchNode z:0]; 

        CCTMXObjectGroup *objects = [_tileMap objectGroupNamed:@"Objects"];
        NSAssert(objects != nil, @"'Objects' object group not found");

        NSMutableDictionary *spawnPoint = [objects objectNamed:@"SpawnPoint"];
        NSAssert(spawnPoint != nil, @"SpawnPoint object not found");

        int x = [[spawnPoint valueForKey:@"x"] intValue];
        int y = [[spawnPoint valueForKey:@"y"] intValue];

        Caster *casterPlayer = [[[Caster alloc] init] initWithSpriteFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"male_walkcycle_19.png"]];
        casterPlayer.position = ccp(x, y);
        casterPlayer.joystick = nil;
        [sceneSpriteBatchNode addChild:casterPlayer z:1000 tag:kCasterTagValue];
        [casterPlayer release];

        CCSprite *sprite = [CCSprite node];
        CGSize size = CGSizeMake(50,50);
        GLubyte *buffer = malloc(sizeof(GLubyte)*4);
        for (int i=0;i<4;i++) {buffer[i]=255;}
        CCTexture2D *tex = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB5A1 pixelsWide:1 pixelsHigh:1 contentSize:size];
        [sprite setTexture:tex];
        [sprite setTextureRect:CGRectMake(0, 0, size.width, size.height)];
        free(buffer);
        sprite.position = ccp(x, y);
        sprite.visible = NO;
        [self addChild:sprite z:5 tag:debugBoxTagValue];

        [self setViewpointCenter:casterPlayer.position];
        [self scheduleUpdate];
    }
    return self;
}
4

1 に答える 1

7

シミュレーターでテストしています。

これを何度も繰り返す必要があるとは信じられません。

シミュレーターを無視してください!

シミュレーターは実際の iOS デバイスではありません。それはあなたの Mac で動作します。より多くのメモリと CPU パワーを利用できます。同時に、ハードウェア アクセラレーション レンダリングではなく、ソフトウェア レンダラーであるため、レンダリング パフォーマンスは大幅に制限されます。

最速の 2012 iMac でさえ、iPad または iPhone Retina Simulator で 60 fps でシーンを実行することはできません。iPad Retina Simulator では、幸運にも 20 fps が得られます。

さらに、シミュレーターでアプリを実行できるのは開発者だけです。テスターではなく、ユーザーがシミュレーターを使用してアプリを実行します。彼らは実際のデバイスを使用します。

シミュレーターでのパフォーマンスの最適化に費やす時間は、完全に時間の無駄に他なりません。これは通常、シミュレーターでのみ発生する問題に適用されます。

デバイスでテスト!iOS シミュレーターでのみ観察されるすべての問題は、意味がなく、無効であり、無効であり、まったく無関係であり、特にパフォーマンスが重要です。

于 2013-03-09T23:33:10.080 に答える