Programação de jogos em C # usando SDL.NET

Um dos problemas com o código aberto é que os projetos às vezes parecem não dar certo ou se revezam confusos. Tome SDL.NET. Ignorando o site para venda, uma pesquisa na web revela cs-sdl.sourceforge.net um projeto que parece ter parado em novembro de 2010. Não achamos que parou, mas apenas parece que parou.

Se você não conhece C #, primeiro precisará aprender como programa em c #. Olhando para outro lugar, encontramos o framework Tao vinculado no site Mono, que parece cobrir a mesma área e adicionar suporte para som etc. Mas, olhando para o sourceforge (de novo!), Ele foi substituído por OpenTK mas o foco é o OpenGL. No entanto, ele também inclui o OpenAL; portanto, a instalação dos dois (cs-sdl e OpenTK) parecia ser o caminho a seguir.

Parte da instalação do OpenTk falhou; o NS (shader) porque não temos o VS 2008 instalado! No entanto, o resto foi ok. Criamos um projeto do C # Console e começamos a jogar com o SDL.NET. A documentação on-line pode ser encontrada aqui.

Olhando para trás, podemos ver que a estrutura OpenTK não era necessária como tal, que o SDL.NET instalou tudo, mas isso não estava claro na época. Ele ainda usa o Tao Framework, embora seu desenvolvimento tenha sido substituído pelo OpenTK. É um pouco confuso e esperamos que a equipe do SDL.NET traga uma versão compatível com OpenTk no futuro.

instagram viewer

Não é, como pensávamos, apenas um invólucro fino em volta do SDL, mas adiciona uma funcionalidade extra considerável. Existem várias classes fornecidas para fornecer o seguinte:

Localize as duas DLLs do SDL.NET (SdlDotNet.dll e Tao. Sdl.dll), bem como as dlls do OpenTK, e adicione-as às referências do projeto. Após a instalação, as DLLs estão localizadas em Arquivos de Programas \ SdlDotNet \ bin (no Windows de 32 bits e Arquivos de Programa (x86) \ SdlDotNet \ bin no Windows de 64 bits. Clique com o botão direito do mouse na seção Referências do Solution Explorer, clique em Add Reference e selecione a guia Browse. Isso abre uma caixa de diálogo do Explorer e depois de localizar as DLLs, selecione e clique em OK.

Uma última coisa, clique em Exibir \ Propriedades para abrir as páginas de propriedades e, na primeira guia (Aplicativo), altere o tipo de Saída de Aplicativo de console para Aplicativo de Windows. Se você não fizer isso quando o programa for executado pela primeira vez e abrir a janela principal do SDL, ele também abrirá uma janela do console.

Agora estamos prontos para começar e criei um pequeno aplicativo abaixo. Isso combina retângulos e círculos de tamanho aleatório e localizados na superfície da Janela a 1.700 desenhados por segundo a uma taxa de quadros de 50 quadros por segundo.

Esses 1.700 vêm da definição do número desenhado por quadro para 17 e da exibição dos quadros por segundo na legenda da janela usando Vídeo. WindowCaption. Cada quadro desenha 17 círculos e retângulos preenchidos, 17 x 2 x 50 = 1.700. Este valor depende da placa de vídeo, CPU, etc. É uma velocidade impressionante.

// Por David Bolton, http://cplus.about.com
using System;
usando o sistema. Desenhando;
usando o SdlDotNet. Gráficos;
usando o SdlDotNet. Testemunho;
usando o SdlDotNet. Gráficos. Primitivos;
classe pública ex1
{
private const int largura = 1024;
const privado int wheight = 768;
tela de superfície estática privada;
Random estático privado r = new Random ();
public static void Main (string [] args)
{
Tela = vídeo. SetVideoMode (largura, peso, 32, falso, falso, falso, verdadeiro);
Eventos. TargetFps = 50;
Eventos. Sair + = (QuitEventHandler);
Eventos. Tick ​​+ = (TickEventHandler);
Eventos. Corre() ;
}
private static void QuitEventHandler (remetente do objeto, args QuitEventArgs)
{
Eventos. QuitApplication ();
}
private static void TickEventHandler (remetente do objeto, args TickEventArgs)
{
para (var i = 0; i <17; i ++)
{
var rect = novo retângulo (novo ponto (r. Em seguida (largura - 100), r. Em seguida (wheight-100)),
novo tamanho (10 + r. Em seguida (largura - 90), 10 + r. Avançar (peso - 90)));
var Col = cor. DeArgb (r. Próximo (255), r. Próximo (255), r. Próximo (255));
var CircCol = Cor. DeArgb (r. Próximo (255), r. Próximo (255), r. Próximo (255));
raio curto = (curto) (10 + r. Próximo (peso - 90));
var Circ = novo círculo (novo ponto (r. Em seguida (largura - 100), r. Próximo (peso-100)), raio);
Tela. Preenchimento (reto, Col);
Circ. Draw (Tela, CircCol, falso, verdadeiro);
Tela. Update ();
Vídeo. WindowCaption = Eventos. Fps. Para sequenciar() ;
}
}
}

O vídeo fornece métodos para definir o modo de vídeo, criar superfícies de vídeo, ocultar e mostrar o cursor do mouse e interagir com o OpenGL. Não que nós vamos fazer o OpenGL por um tempo.

Aqui o objeto Video é usado para definir o tamanho e a resolução da janela do jogo (tela cheia é uma opção). Os parâmetros para SetVideoMode permitem alterar essas e 13 sobrecargas fornecem muita variedade. Há um arquivo .chm (formato de ajuda html do Windows) na pasta doc que documenta todas as classes e membros.

O objeto Events possui um manipulador Quit events que permite adicionar lógica de fechamento e você deve chamar Events. QuitApplication () para responder ao usuário que fecha o aplicativo. Os eventos. Tick ​​é possivelmente o manipulador de eventos mais importante. Ele chama o manipulador de eventos especificado para cada quadro. Este é o modelo para todo o desenvolvimento do SDL.NET.

Você pode definir a taxa de quadros desejada e, ao reduzir o loop para 5 e alterar o Targetfps para 150, rodamos a 164 quadros por segundo. TargetFps é uma figura aproximada; isso atrasa para que você chegue perto dessa figura, exceto os eventos. Fps é o que é entregue.

Assim como a versão original sem janelas do SDL, o SDL.NET usa superfícies para renderizar na tela. Uma superfície pode ser construída a partir de um arquivo gráfico. Há um grande número de propriedades e métodos que possibilitam a leitura ou gravação de pixels, além de desenhe as primitivas gráficas, misture outras superfícies e até despeje uma superfície em um arquivo de disco para tirar screenshots.

instagram story viewer