2012-02-16 5 views
0

В моем приложении у меня есть большое количество различных анимаций моего спрайта, и в более поздних версиях будет больше. Трудно использовать файл текстуры сотен кадров, поэтому я хотел бы сделать несколько tham. Итак, я написал этот код:CCSpriteBatchNode. change texture file

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, и когда он пытается переключить тх, я получил эту ошибку:

* Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'CCSprite: setTexture doesn't work when the sprite is rendered using a CCSpriteBatchNode'

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

ответ

0

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

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

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

+0

Я переключаю ccspritebatchnode, когда мне нужно использовать мой новый атлас текстуры, но это очень дорогостоящий процесс, он зависает при переключении на я получаю предупреждение о памяти в консоли. – RollRoll