Hola.
Para solucionar el tema de la velocidad con la que dibujas, deberias hacerlo por tiempo, asi irá independiente del nº de fps que de en un equipo o en otro (a menos que tengas una pausa global o algo asi). Yo lo hago asignando una cantidad MS (milisengudos) a cada sprites, es decir, este sprite(frame), estará siendo dibujando durante ese tiempo y luego cambia al siguiente y asi. Para hacerlo por tiempo, usa funciones tales como GetTickCount();, y si quieres funciones mas proximas o mas precisas usa: QueryPerformanceCounter(); y QueryPerformanceFrequency();
Una idea es crearte varias clases para controlar animaciones, yo tengo una clase que gestiona todas las secuencias de un objeto (en tu caso, la nave), una clase que gestiona una secuencia y una clase que gestiona un frame de esa secuencia. Asi lo tienes todo muy ordenado y es bastante eficaz. Eso ya por gustos.
Para el tema del Z, yo lo hago por orden de render, create una lista con los elementos a dibujar ordenados por su Z y si esta cambia, cuando cambié, actualiza la lista. Si tienes un cambio abusivo de Z, no se si será optimo, aunque no creo que tengas muchos elementos para render a la vez.
Espero que te sea util. Chao.
Para solucionar el tema de la velocidad con la que dibujas, deberias hacerlo por tiempo, asi irá independiente del nº de fps que de en un equipo o en otro (a menos que tengas una pausa global o algo asi). Yo lo hago asignando una cantidad MS (milisengudos) a cada sprites, es decir, este sprite(frame), estará siendo dibujando durante ese tiempo y luego cambia al siguiente y asi. Para hacerlo por tiempo, usa funciones tales como GetTickCount();, y si quieres funciones mas proximas o mas precisas usa: QueryPerformanceCounter(); y QueryPerformanceFrequency();
Una idea es crearte varias clases para controlar animaciones, yo tengo una clase que gestiona todas las secuencias de un objeto (en tu caso, la nave), una clase que gestiona una secuencia y una clase que gestiona un frame de esa secuencia. Asi lo tienes todo muy ordenado y es bastante eficaz. Eso ya por gustos.
Para el tema del Z, yo lo hago por orden de render, create una lista con los elementos a dibujar ordenados por su Z y si esta cambia, cuando cambié, actualiza la lista. Si tienes un cambio abusivo de Z, no se si será optimo, aunque no creo que tengas muchos elementos para render a la vez.
Espero que te sea util. Chao.