Вращение CCSprite с CCParticleSystemQuad в качестве дочернего узла

У меня есть CCSprite, который может прыгать по экрану iPhone. Этот спрайт имеет CCParticleSystemQuad в качестве дочернего узла. Частицы — это просто маленькие простые круги, которые тянутся за движущимся спрайтом. Все работает нормально, пока спрайт не повернется из-за столкновения с краем экрана. Когда это происходит, существующие частицы внезапно рисуются в странном месте.

Есть идеи, почему это происходит?

Я пробовал несколько вещей до сих пор. Сначала я попробовал все три значения positionType для системы частиц. Ни один из них не решил проблему вращения. Фактическое вращение выполняется с помощью CCRotateTo. Удаление этого действия устраняет проблему расположения частиц. Так что, возможно, поворот дочернего узла CCSprite на CCLayer мог бы заменить мой текущий CCSprite. Я пытался читать через http://www.cocos2d-iphone.org/forum/topic/63951 но это немного выше моего понимания. Любые отзывы и предложения очень ценятся!

Редактировать №1. Я нашел быстрое решение: непосредственно перед CCRotateTo я сообщаю замыкающим частицам resetSystem. Однако я все же хотел бы понять причину странного поведения рисования.


person MrDatabase    schedule 20.12.2012    source источник


Ответы (1)


Я думаю, это происходит из-за того, что CCParticleSystem является дочерним элементом CCSprite, поэтому любое положение или поворот спрайта, которые вы выполняете, повлияют на поведение всех частиц, которые испускаются и уже были испущены. Таким образом, если у вас есть какие-то замыкающие частицы, которые все еще задерживаются на экране, они все еще являются дочерними элементами CCSprite, и его вращение заставит все оставшиеся частицы вращаться вокруг текущей позиции спрайта.

Если вы хотите устранить этот эффект, вы можете добавить к слою CCParticleSystem, чтобы на него не влияло вращение CCSprite. Недостатком этого подхода является то, что вам придется добавить код, чтобы CCParticleSystem отслеживал положение CCSprite, поскольку он больше не является дочерним элементом CCSprite. Однако это должно быть довольно легко сделать.

person Sylvan    schedule 22.12.2012