Прикосновения перемещены 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]
при установке положения эмиттера и не видел разницы, так что это не просто вопрос использования неявных анимаций.