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

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 para la 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 a programar 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!), OpenTK lo ha reemplazado, pero el enfoque 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í..

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.

Qué es exactamente SDL.NET?

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:

  • Temporizadores
  • Proporciona Sprites, incluyendo animación y texto.
  • Proporciona superficies para 2D y OpenGl.
  • Proporciona soporte para cargar y reproducir películas
  • Proporciona soporte para audio
  • Proporciona Bezier, polígono (y texturas), cuadrado, círculo, línea, dibujo circular.
  • Proporciona soporte de partículas con emisores, sprites y manipuladores..
  • Proporciona interfaz con formularios de Windows a través de un PictureBox compartido con superficie.

Preparativos

Hay varias cosas que debe hacer para configurarlo. Aquí están:

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 y luego haga clic en Agregar referencia y seleccione Agregar referencia la pestaña Examinar. Eso abre un diálogo del Explorador y luego de localizar los dlls, seleccione y haga clic en Aceptar.

SDL.NET utiliza el conjunto de dlls de SDL y los instala en la carpeta lib. No los elimines!

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 bordea 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.

Ese 1,700 proviene 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;
usando System.Drawing;
usando SdlDotNet.Graphics;
usando SdlDotNet.Core;
utilizando SdlDotNet.Graphics.Primitives;
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);
Events.TargetFps = 50;
Events.Quit + = (QuitEventHandler);
Events.Tick + = (TickEventHandler);
Events.Run ();

vacío estático privado QuitEventHandler (remitente del objeto, argumentos QuitEventArgs)

Events.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.Next (wwidth- 100), r.Next (wheight-100)),
nuevo tamaño (10 + r.Next (wwidth - 90), 10 + r.Next (wheight - 90)));
var Col = Color.FromArgb (r.Next (255), r.Next (255), r.Next (255));
var CircCol = Color.FromArgb (r.Next (255), r.Next (255), r.Next (255));
radio corto = (corto) (10 + r.Next (wheight - 90));
var Circ = nuevo círculo (nuevo punto (r.Next (wwidth- 100), r.Next (wheight-100)), radio);
Screen.Fill (rect, Col);
Circ.Draw (Screen, CircCol, false, true);
Screen.Update ();
Video.WindowCaption = Events.Fps.ToString ();


Desarrollo orientado a objetos

SDL.NET está muy orientado a objetos y hay dos objetos predefinidos que se utilizan en cada aplicación SDL.NET.

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 estemos haciendo OpenGL por un tiempo.

La clase Eventos contiene eventos que se pueden adjuntar para leer la entrada del usuario y otros sucesos diversos.

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 Events.QuitApplication () para que responda al usuario que cierra la aplicación. The Events.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; se demora para acercarte a esa cifra, pero los Eventos. Fps es lo que se entrega.

Superficies

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 dibujar las primitivas gráficas, borrar otras superficies, incluso volcar una superficie en un archivo de disco para tomar capturas de pantalla.

SDL> NET proporciona casi todo para permitirte crear juegos. Examinaremos las diversas funciones en los próximos tutoriales y luego pasaremos a crear juegos con él..