Прикосновения перемещены CAEmitterLayer с задержкой в ​​точке после точки касания...

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

он отлично работал, когда я инициализировал CAEmitterLayer, перезаписав

+ (Class) layerClass 
{
    //configure the UIView to have emitter layer
    return [CAEmitterLayer class];
}

и инициализация с

fireEmitter = (CAEmitterLayer*)self.layer; 

Я изменил это на

fireEmitter = [CAEmitterLayer layer];
fireEmitter.frame = self.bounds;
[self.layer addSublayer:fireEmitter];

и теперь ячейки излучателя следуют за перемещенной точкой касания, как гейши на расстоянии

это почему? потому что я поменял слой, где излучатель излучает сейчас? пожалуйста помоги! Thnx

1 ответ

Решение

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

Предположим, вы можете перемещать палец по диагонали по всему экрану за 166 мс (достаточно быстро). Предположим также, что вы визуализируете достаточно частиц, чтобы замедлить устройство с 60 FPS до 30 FPS (33 мс на цикл рендеринга). Это означает, что за считывание экрана вы получаете всего около 5 обратных вызовов. Это, в свою очередь, означает, что вы получаете событие касания только на каждые 100 пикселей или около того, чтобы ваш палец двигался.

Таким образом, даже если вы предполагаете, что в позиции касания вы получаете нулевую задержку (нет), вы получаете их достаточно часто, так что почти всегда будет какая-то видимая задержка. Единственный способ уменьшить эту задержку - увеличить частоту кадров (используя меньше / меньше частиц или переключившись на технологию, которая лучше масштабируется по количеству имеющихся у вас частиц, например, OpenGL). Сначала вы должны использовать инструменты, чтобы убедиться, что частота кадров действительно является вашей проблемой.

ПРИМЕЧАНИЕ: я измерил эффект использования [CATransaction setDisableActions:YES] при установке положения эмиттера и не видел разницы, так что это не просто вопрос использования неявных анимаций.

Другие вопросы по тегам