0

「ios5でcocos2dゲーム開発を学ぶ」に飛び込むとき、ch08で

EnemyCache.m

-(id) init
{
    if ((self = [super init]))
    {
        // get any image from the Texture Atlas we're using
        CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"monster-a.png"];
        batch = [CCSpriteBatchNode batchNodeWithTexture:frame.texture];
        [self addChild:batch];

        [self initEnemies];
        [self scheduleUpdate];
    }

    return self;
}

したがって、バッチはテクスチャ「monster-a.png」を使用します

の方法EnemyEntity.minitWithType

switch (type)
{
    case EnemyTypeUFO:
        enemyFrameName = @"monster-a.png";
        bulletFrameName = @"shot-a.png";
        break;
    case EnemyTypeCruiser:
        enemyFrameName = @"monster-b.png";
        bulletFrameName = @"shot-b.png";
        shootFrequency = 1.0f;
        initialHitPoints = 3;
        break;
    case EnemyTypeBoss:
        enemyFrameName = @"monster-c.png";
        bulletFrameName = @"shot-c.png";
        shootFrequency = 2.0f;
        initialHitPoints = 15;
        break;

    default:
        [NSException exceptionWithName:@"EnemyEntity Exception" reason:@"unhandled enemy type" userInfo:nil];
}

if ((self = [super initWithSpriteFrameName:enemyFrameName]))
{
    //...
}

したがって、返されるオブジェクトは3つの異なるフレームにある可能性があります。そのテクスチャに含まれているCCSpriteのみがCCSpriteBatchNodeに追加できるので、明らかに、「monster-b.png」は「monster-a.png」に含まれていません。なぜ別の敵をバッチに追加できるのでしょうか。

4

1 に答える 1

1

1つに複数の画像を配置することが可能です。このような画像はアトラスと呼ばれます。つまり、すべてのモンスターが1つの大きなテクスチャになっています。各画像へのアクセスは、コンクリート画像が大きなテクスチャのどこに配置されているかに関する情報が保存されている.plist構成ファイルを使用して行われます。

テクスチャを切り替えるにはコストのかかる操作であるため、多くの意味があります。はるかに高速なのは、必要なものすべてを1つのテクスチャに配置し、バッチ処理を使用することです。また、テクスチャはGPUの(2 ^ n、2 ^ m)バッファに格納され、大きなテクスチャを提供するため、GPUのメモリ消費量が少なくなり、テクスチャの空き領域を最小限に抑えることができます。たとえば、65ピクセルあたり65のサイズの画像をロードすると、128ピクセルあたり128ピクセルのテクスチャが作成されます。

于 2012-06-19T15:13:30.840 に答える