我偶然发现了一个问题:解决the first problem,现在,当手指在屏幕上移动时,我的粒子踪迹会延迟到触摸位置后面。
当我通过覆盖
初始化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];
现在发射器单元跟踪移动的触摸点,如距离中的geishas
为什么?因为我现在发射了发射器发射的层? 请帮忙! 日Thnx
答案 0 :(得分:1)
您每秒钟只能获得如此多的触摸事件,并且您每秒只能在屏幕上绘制一定次数。我们来做一些数学。
假设您可以在166ms内对角移动整个屏幕(快速滑动)。假设您正在渲染足够的粒子以使设备从60 FPS减速到30 FPS(每个渲染周期33ms)。这意味着您只需要在刷屏幕时获得大约5次触控回调。反过来,这意味着您只需每100个像素触摸一次触摸事件,即手指移动。
所以,即使你假设你接到的触摸位置没有滞后(没有),你只能经常得到它们,你几乎总会有一些明显的滞后。减少这种滞后的唯一方法是提高帧速率(通过使用更少/更小的粒子或切换到可以在您拥有的粒子数量上更好地扩展的技术,例如OpenGL)。您应首先使用仪器来验证帧速率实际上是您的问题。
注意:我在设置发射器位置时测量了使用[CATransaction setDisableActions:YES]
的效果并没有看到差异,所以这不仅仅是使用隐式动画的问题。