CCSpriteBatchNode. изменить файл текстуры - PullRequest
0 голосов
/ 16 февраля 2012

В моем приложении у меня есть множество различных анимаций моего спрайта, и в последующих версиях их будет больше.Довольно сложно использовать текстурный файл с сотнями кадров, поэтому я бы хотел сделать несколько из них.Итак, я написал этот код:

    if (running)
    {
        NSArray * animations = [[physicalBody getAnimationList] objectForKey:ANIMATION_RUN];
        if (!inAir)
        {
            currentFrame++;
            if (currentFrame>=[animations count]*ANIMATION_ITERATION) 
                currentFrame = 0;
        }
        else
        {
            currentFrame = 2;
        }
        PhysicsSprite *sprite = (PhysicsSprite*)[physicalBody getSprite];
        [sprite setFlipX:(moveingDirection)];
        [sprite setDisplayFrame:[animations objectAtIndex:currentFrame/ANIMATION_ITERATION]];
    }
    else
    {
        NSArray * animations = [[physicalBody getAnimationList] objectForKey:ANIMATION_STAND];
        currentFrame++;
        if (currentFrame>=[animations count]*ANIMATION_ITERATION) 
            currentFrame = 0;
        PhysicsSprite *sprite = (PhysicsSprite*)[physicalBody getSprite];
        [sprite setFlipX:(moveingDirection)];
        [sprite setDisplayFrame:[animations objectAtIndex:currentFrame/ANIMATION_ITERATION]];   //error here
    }

Массив анимаций был создан из разных * .png, и когда он пытается переключить их, я получил эту ошибку:

* Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «CCSprite: setTexture не работает, когда спрайт отображается с использованием CCSpriteBatchNode»

Как переключать файлы текстуры?Или может быть есть другое решение?

1 Ответ

0 голосов
/ 17 февраля 2012

Вы не можете изменить текстуру, которую использует CCSpriteBatchNode.

Однако вы можете и должны создать CCSpriteBatchNode для каждой текстуры, которую вы собираетесь использовать . Затем, всякий раз, когда вы устанавливаете рамку дисплея, сначала проверьте текстуру рамки и используйте ее для удаления спрайта из текущего узла пакета спрайтов и добавьте его к тому, который настроен для использования той же текстуры, что и рамка спрайта.

Однако это может привести к проблемам с z-порядком. В худшем случае вам просто придется либо переделать анимацию, либо не использовать узлы спрайтов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...