Un montón de preguntas acerca de SDL
Pregunta
Estoy empezando un poco de estrategia en tiempo real juego con SDL y aquí están algunas preguntas:
- Yo trabajo con pequeños sprites, es hay una manera de mostrar la pantalla x2 con líneas de exploración ?Traté de hacer zoom con rotozoom, pero se ralentiza el juego y me gustaría evitar el escalado de mis sprites con la mano.
- ¿Cómo puedo cambiar
entre pantalla completa y ventana mientras
de la ejecución ?He encontrado el
SDL_WM_ToggleFullScreen
la función, pero no parece funcionar en Windows según SDL doc. - Con el fin de poner mi propio cursor me carga un sprite con mi puntero y
hacer que siga al ratón.Pero me gustaría
también como para reducir la velocidad de los fotogramas con
SDL_Delay
y si lo hace, el movimientos del puntero no es suave.La SDL cursor no parecía influenciado por la aplicación de la tasa de fotogramas es una la mejor solución para usarlo y si es así, hay una forma de usar una imagen en lugar de una extraña máscara ? - Existe una mejor manera de limitar el framerate ?
- ¿Cómo puedo tinte de una superficie (como con
draw_lit_sprite
en Allegro)
Solución
Tamaño Sprite - para cualquier tipo de escalado en tiempo real o rotación que mejor está fuera con OpenGL en lugar de un blitter software como SDL. Otras bibliotecas como SFML terminar con esto para usted.
Pantalla Completa / de ventana -. La respuesta de Zack ve bien lo suficiente, simplemente llame SDL_SetVideoMode nuevo
El movimiento del cursor - Por lo general, el sistema operativo hace que el ratón por separado de la aplicación subyacente para que se mantenga sensible. Si usted está haciendo que el cursor del ratón de ti mismo, entonces su único recurso es hacer que el juego sea más rápido. No creo que se obtiene mucha opción sobre el cursor en sí, aunque (posiblemente debido a los requisitos de plataforma cruzada).
velocidad de fotogramas -. Desacoplamiento muchos sugieren movimiento en el juego y la física de su tasa de fotogramas (por ejemplo, véase ' fijar su Timestep '). Además, tenga en cuenta que SDL_Delay impone un límite inferior en el tiempo de espera, no un límite superior.
Teñido una superficie -. De nuevo, esto se realiza mejor mediante OpenGL desde SDL no soporta esta directamente
Otros consejos
¿Cómo puedo cambiar entre pantalla completa y ventana mientras se ejecuta? He encontrado la función
SDL_WM_ToggleFullScreen
pero no parece funcionar en Windows según la doc SDL.
Sí, la documentación indica que la función draw_lit_sprite
actualmente sólo funciona para X.
La manera de hacerlo es así:
void SdlGraphics::setupScreenSurface() {
Uint32 flags = 0;
flags |= SDL_HWSURFACE;
flags |= SDL_DOUBLEBUF;
if(isFullScreen) {
flags |= SDL_FULLSCREEN;
}
screenSurface = boost::shared_ptr<SDL_Surface>(
SDL_SetVideoMode(width, height, depth, flags),
utility::NullDeleter()
);
}
void SdlGraphics::setFullScreen(bool fullScreen) {
if(isFullScreen != fullScreen) {
isFullScreen = fullScreen;
setupScreenSurface();
}
}
En estos puntos:
Yo trabajo con pequeños sprites, hay una modo de visualización de la pantalla con x2 líneas de exploración? He intentado con el zoom rotozoom pero ralentiza el juego y me gustaría evitar escalar mi sprites a mano.
¿Cómo puedo Tinte una superficie (como con
rotozoom
en Allegro)
Me casi recomienda utilizar el modo OpenGL con SDL. Se le dará la libertad acelerado por hardware de hacer este tipo de cosas. <=> se hace con el software (que yo sepa) y es por eso que es tan lento. Siempre será lenta.
Una otra opción que pueda tener con el dibujo de los sprites a 2x es dibujar todo para una textura tamaño 1x, y después de todo lo que se dibuja, la escala que la textura 2x. Entonces sólo está procesando una sola superficie en lugar de muchos pequeños una y otra vez por cuadro.
En cuanto a la cuestión del cursor, parece que usted puede querer ser dibujo como más rápido posible, pero sólo la actualización de su juego a una velocidad constante . De esa manera usted tendrá un desplazamiento suave pero el juego no va a salir de control.