Частицы в cocos2d-x мерцают при изменении setPosition

Я использую частицы, слегка модифицированные CCParticleFlower с positionVar, чтобы они были в форме вертикальной линии сверху вниз. В обновлении CCNode я постоянно меняю положение частиц слева направо по всему экрану, когда они достигают правой стороны, я устанавливаю x в 0 и начинаю прокручивать вправо.

Проблема в том, что когда я сбрасываю значение X на 0, все частицы мигают, они исчезают примерно на один кадр и появляются в следующем кадре, это вызывает неприятный эффект мерцания.

Этого не происходит, когда я увеличиваю значения X на небольшие числа, но когда положение частицы сбрасывается до его начального положения, оно мерцает на win32, android и ios. Я использую самую последнюю версию 1.1 (главная ветка)


person michael    schedule 16.06.2012    source источник


Ответы (1)


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

http://www.cocos2d-iphone.org/forum/topic/17167

Соответствующий пост:

Я только что столкнулся с той же проблемой, и мне потребовалось некоторое время, чтобы разобраться в ней, ›вот что ниже: не используйте

[самостоятельное расписание: @selector(NextFrame:)];

Вместо этого используйте

[самостоятельное обновление расписания];

и переименуйте NextFrame: для обновления:

Использование пользовательского селектора планирует ваше обновление в самом конце очереди CCScheduler, другими словами, это приведет к тому, что ваш метод NextFrame: будет вызываться ПОСЛЕ метода update: системы частиц, потому что система частиц планирует свой собственный метод обновления с приоритетом из 1. Это нехорошо, потому что положение четырехугольников для частиц обновляется с использованием текущей позиции эмиттера, а затем эмиттер перемещается в вашем методе NextFrame:, который заставляет все частицы снова перемещаться, потому что позиция эмиттера на самом деле является положением CCNode, рисующего частицы. Используя scheduleUpdate, вы действительно планируете свой метод update: с приоритетом 0, что означает, что он будет вызываться перед методом update: системы частиц, и все будет хорошо.

Итак, в основном, добавьте метод обновления в свой класс и вызовите scheduleUpdate вместо того, чтобы планировать его вручную.

person J. Alan Atherton    schedule 09.01.2013