Programación de juegos en C # usando SDL.NET

Uno de los problemas con el código abierto es que los proyectos a veces parecen quedar en el camino o tomar turnos confusos. Toma SDL.NET. Ignorando el sitio web en venta, una búsqueda en la web revela cs-sdl.sourceforge.net Un proyecto que parece haberse detenido en noviembre de 2010. No creemos que se haya detenido, pero parece que sí.

Si no conoce C #, primero deberá aprender cómo programa en C #. Mirando a otra parte, nos encontramos con el marco Tao vinculado en el sitio web de Mono que parece cubrir la misma área y agregar soporte para sonido, etc. Pero mirando en sourceforge (¡otra vez!), Ha sido reemplazado por OpenTK pero el foco allí es OpenGL. Sin embargo, también incluye OpenAL, por lo que la instalación de los dos (cs-sdl y OpenTK) parecía ser el camino a seguir.

Parte de la instalación de OpenTk falló; NS (sombreador) porque no tenemos VS 2008 instalado. Sin embargo, el resto estaba bien. Creamos un proyecto de consola C # y comenzamos a jugar con SDL.NET. La documentación en línea se puede encontrar aquí.

instagram viewer

Mirando hacia atrás, podemos ver que el marco OpenTK no era necesario como tal, que SDL.NET lo instaló todo, pero eso no estaba claro en ese momento. Todavía usa el Marco Tao a pesar de que OpenTK ha reemplazado su desarrollo. Es un poco confuso y esperamos que el equipo de SDL.NET presente una versión compatible con OpenTk en el futuro.

No es, como pensamos, solo una envoltura delgada alrededor de SDL, sino que agrega una funcionalidad adicional considerable. Hay una serie de clases proporcionadas para proporcionar lo siguiente:

Localice los dos dlls SDL.NET (SdlDotNet.dll y Tao. Sdl.dll), así como los dlls OpenTK, y agréguelos a las referencias del proyecto. Después de la instalación, los archivos DLL se encuentran en Archivos de programa \ SdlDotNet \ bin (en Windows de 32 bits y Archivos de programa (x86) \ SdlDotNet \ bin en Windows de 64 bits. Haga clic derecho en la sección Referencias en el Explorador de soluciones, luego haga clic en Agregar referencia y seleccione la pestaña Examinar. Eso abre un diálogo del Explorador y después de localizar los dlls, seleccione y haga clic en Aceptar.

Una última cosa, haga clic en Ver \ Propiedades para abrir las páginas de Propiedades y en la primera pestaña (Aplicación) Cambiar el tipo de Salida de la Aplicación de Consola a la Aplicación de Windows. Si no hace esto cuando el programa se ejecuta por primera vez y abre la ventana principal de SDL, también abrirá una ventana de consola.

Ahora estamos listos para comenzar y he creado una breve aplicación a continuación. Esto genera rectángulos y círculos de tamaño aleatorio y ubicados en la superficie de la ventana a 1.700 dibujados por segundo a una velocidad de cuadro de 50 cuadros por segundo.

Esos 1,700 provienen de establecer el número dibujado por fotograma en 17 y mostrar los fotogramas por segundo en el subtítulo de la ventana usando Video. WindowCaption. Cada cuadro dibuja 17 círculos y rectángulos rellenos, 17 x 2 x 50 = 1,700. Esta cifra depende de la tarjeta de video, CPU, etc. Es una velocidad impresionante.

// Por David Bolton, http://cplus.about.com
utilizando el sistema;
utilizando el sistema. Dibujo;
usando SdlDotNet. Gráficos;
usando SdlDotNet. Núcleo;
usando SdlDotNet. Gráficos. Primitivas;
clase pública ex1
{
privado const int wwidth = 1024;
const privado int wheight = 768;
pantalla de superficie estática privada;
Privado estático aleatorio r = nuevo aleatorio ();
public static void Main (cadena [] args)
{
Pantalla = Video. SetVideoMode (wwidth, wheight, 32, false, false, false, true);
Eventos. TargetFps = 50;
Eventos. Salir + = (QuitEventHandler);
Eventos. Tick ​​+ = (TickEventHandler);
Eventos. Correr() ;
}
vacío estático privado QuitEventHandler (remitente del objeto, argumentos QuitEventArgs)
{
Eventos. QuitApplication ();
}
vacío estático privado TickEventHandler (remitente de objetos, argumentos TickEventArgs)
{
para (var i = 0; i <17; i ++)
{
var rect = nuevo rectángulo (nuevo punto (r. Siguiente (wwidth- 100), r. Siguiente (wheight-100)),
Nuevo tamaño (10 + r. Siguiente (wwidth - 90), 10 + r. Siguiente (en peso - 90)));
var Col = Color. FromArgb (r. Siguiente (255), r. Siguiente (255), r. Siguiente (255));
var CircCol = Color. FromArgb (r. Siguiente (255), r. Siguiente (255), r. Siguiente (255));
radio corto = (corto) (10 + r. Siguiente (cuando - 90));
var Circ = nuevo círculo (nuevo punto (r. Siguiente (wwidth- 100), r. Siguiente (wheight-100)), radio);
Pantalla. Relleno (rect, Col);
Circ. Draw (Screen, CircCol, false, true);
Pantalla. Actualización ();
Vídeo. WindowCaption = Eventos. Fps. Encadenar() ;
}
}
}

Video proporciona métodos para establecer el modo de video, crear superficies de video, ocultar y mostrar el cursor del mouse e interactuar con OpenGL. No es que haremos OpenGL por un tiempo.

Aquí, el objeto Video se usa para establecer el tamaño y la resolución de la ventana del juego (la pantalla completa es una opción). Los parámetros para SetVideoMode le permiten cambiarlos y 13 sobrecargas proporcionan mucha variedad. Hay un archivo .chm (formato de ayuda html de Windows) en la carpeta doc que documenta todas las clases y miembros.

El objeto Eventos tiene un controlador de eventos Salir que le permite agregar una lógica de cierre y debe llamar a Eventos. QuitApplication () para que responda al usuario que cierra la aplicación. Los eventos. Tick ​​es posiblemente el controlador de eventos más importante. Llama al controlador de eventos especificado cada trama. Este es el modelo para todo el desarrollo de SDL.NET.

Puede establecer la velocidad de fotogramas deseada y al reducir el ciclo a 5 y cambiar el Targetfps a 150, lo ejecutamos a 164 fotogramas por segundo. TargetFps es una figura aproximada; pone demoras para acercarte a esa cifra pero a los Eventos. Fps es lo que se entrega.

Al igual que la versión original sin ventana de SDL, SDL.NET utiliza superficies para renderizar en la pantalla. Se puede construir una superficie a partir de un archivo gráfico. Hay una gran cantidad de propiedades y métodos que permiten leer o escribir píxeles, así como dibuje las primitivas gráficas, borre otras superficies, incluso voltee una superficie en un archivo de disco para tomar capturas de pantalla

instagram story viewer