Pregunta

Me hizo un juego que utiliza muchos temporizadores en todo el código. Sin embargo, el temporizador tiene que ocuparse de muchas tareas en una pequeña cantidad de tiempo que lleva al problema en el que no hay retraso en mi juego. Por ejemplo, mis funcionamiento del temporizador con un intervalo de (0.05) y que deba extraer y actualizar muchas de las imágenes en la pantalla. ¿Hay alguna manera de distribuir el flujo de trabajo para que el programa se ejecuta mucho más suave?

Gracias

Kevin

¿Fue útil?

Solución

Yo usaría un NSThread en lugar de un NSTimer. He tenido más éxito en esta área utilizando NSThread porque se ejecuta en un hilo independiente y no se disparó el hilo principal interfaz de usuario. En el bucle para el hilo del sueño por 1/20 (su 0,05) de un segundo. Debido a que el hilo no se está ejecutando en la interfaz de usuario enhebrar la totalidad de sus tareas no debe retardar su interfaz de usuario abajo. Sin embargo beacsue no se está ejecutando en la interfaz de usuario, tendrá que llamar performSelectorOnMainThread para obtener la interfaz de usuario para la actualización de este subproceso en segundo plano. Puse una cerradura de mi método de actualización (un simple booleano) que indica si la última actualización de la interfaz de usuario no ha sucedido, simplemente omitir éste. a continuación, si estoy acabando el tiempo de procesamiento acabo de allí cae un marco o dos aquí y. También hago un montón de comprobación para ver si algo ha cambiado en realidad antes de volver a dibujar.

Otros consejos

Una solución simple:. Zanja NSTimer

Mover el código de nuevo trazado a un solo método, a continuación, utilizar CADisplayLink. El problema con el uso del enfoque NSTimer es que todo está siendo rediseñado demasiado rápido o demasiado lento para la pantalla. Mediante el uso de CADisplayLink, puede sincronizar el código de redibujado a la tasa de refresco de la pantalla. Todo lo que necesita hacer a continuación es tocar su código para que pueda hacer frente a no ser llamados a una hora específica.

Y sí, comprobación para asegurarse de que no es necesario volver a dibujar como se dijo anteriormente Aran Mulholland. Sólo asegúrese de que los controles no se toman el tiempo que un redibujado.

Y recuerda que para optimizar el código. Mucho. Uso Ivars acceder a los objetos, sino que toda la propiedad (self.myObject =) para establecer sus objetos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top