2013-06-13 5 views
1

Я новичок в Cocos2dx, и я пытаюсь создать анимацию планеты, вращаясь, используя текстуру прямоугольника 3: 1, которая содержит 3 квадрата, это две грани (карта) сферы (третий квадрат - это клон первого). Я создаю массив кадров, обрезая текстуру и добавляя их в CCAnimation. Затем я тестирую эту анимацию с двумя эффектами, чтобы квадратный кадр стал трехмерным: CCLens и CCTurnOffTiles (я буду изменять его в будущем, чтобы отключить только сетки вне круга).Выполняйте много действий эффекта одновременно в Cocos2dx

Но есть проблемы: два эффекта не складываются. Если CCTurnOffTiles добавляется после CCLens, CCLens не будет работать; если CCLens добавляется после CCTurnOffTiles, CCDirector будет бросать исключение нарушения чтения во время выполнения.

Есть ли какое-либо решение для запуска многих эффектов одновременно или для реализации анимации планеты другим способом? Благодарю.

+0

При создании двух разных анимаций убедитесь, что вы используете разные массивы и CCAnimation. Я уверен, что вы можете использовать две разные анимации на одном и том же спрайте одновременно с помощью отдельного runAction –

+0

@GaneshSomani Обычно он должен работать. Но в этом случае кажется, что CCLens и CCTurnOffTiles не будут работать вместе. – eee

ответ

1

Оба CCTurnOffTiles и CCLens3D наследуют CCGridAction.

Но одно отменяет другое: CCTurnOffTiles отключит сетчатые плитки, а CCLens3d - эти сетчатые плитки.

Я рекомендую вам нарисовать все планетные спрайты, уже обведенные кружком и используя SpriteSheet, и затем анимацию с помощью CCAnimation без использования CCTurnOffTiles или CCLens3D. Это проще всего и будет потреблять меньше процессора.

+0

В моем проекте есть много объектов планеты, использующих разные текстуры. Рисование всех планетных спрайтов означает, что нужно сделать много работ. Поэтому я ищу другое решение вместо этого. Есть ли способ напрямую модифицировать CCFrame во время загрузки или создать маску, чтобы заставить только точки внутри круга становиться видимыми во время анимации? – eee

+0

Вы можете маскировать спрайты с использованием шейдеров, GlScissor или CCClippingNode. Взгляните на эти ссылки: http://www.raywenderlich.com/4428/how-to-mask-a-sprite-with-cocos2d-2-0, http://www.cocos2d-iphone.org/forums/topic/how-to-set-a-mask-on-a-spriteatlassprite-object /, http://stackoverflow.com/questions/3177751/cocos2d-iphone-sprite-cliping-mask-frame – Bivis

3

Попробуйте использовать CCSpawn.

// Create the effects 
CCLens3D * lensEffect; // Your CCLens3D create() 
CCTurnOffTiles * turnOff; // Your CCTurnOfftiles create() 

// Create a spawn to run them simultaneously 
CCSpawn * sphereEffect = CCSpawn::createWithTwoActions(lensEffect, turnOff); 

// Run the spawn 
myObject -> runAction(sphereEffect); 
+0

Я попытался использовать CCSpawn, но получил ту же ошибку при использовании runAction отдельно. – eee