Programmazione di giochi in C # usando SDL.NET Tutorial One

Uno dei problemi con l'open source è che a volte i progetti sembrano cadere sul ciglio della strada o fare curve confuse. Prendi SDL.NET. Ignorando il sito Web in vendita, una ricerca sul web rivela a cs-sdl.sourceforge.net un progetto che sembra essersi fermato a novembre 2010. Non pensiamo che si sia fermato ma sembra proprio che abbia.

Se non conosci C #, dovrai prima imparare come programmare in C #. Guardando altrove, ci siamo imbattuti nel framework Tao collegato al sito Web Mono, che sembra coprire la stessa area e aggiungere supporto per il suono, ecc. Ma guardando su sourceforge (di nuovo!), È stato sostituito da OpenTK ma il focus è OpenGL. Tuttavia, include anche OpenAL, quindi l'installazione dei due (cs-sdl e OpenTK) sembra essere la strada da percorrere.

Parte dell'installazione di OpenTk non è riuscita; NS (shader) perché non abbiamo VS 2008 installato! Tuttavia, il resto era ok. Abbiamo creato un progetto console C # e abbiamo iniziato a giocare con SDL.NET. La documentazione online è disponibile qui.

Guardando indietro, possiamo vedere che il framework OpenTK non era necessario in quanto tale, che SDL.NET ha installato tutto ma non era chiaro al momento. Utilizza ancora il Tao Framework anche se lo sviluppo di questo è stato sostituito da OpenTK. È un po 'confuso e speriamo che il team SDL.NET pubblicherà una versione compatibile con OpenTk in futuro.

Che cosa è esattamente SDL.NET?

Non è, come pensavamo, solo un involucro sottile rotondo SDL, ma aggiunge considerevoli funzionalità extra. Esistono diverse classi fornite per fornire quanto segue:

  • Timer
  • Fornisce Sprite, tra cui animazione e testo
  • Fornisce superfici per 2D e OpenGl
  • Fornisce supporto per il caricamento e la riproduzione di filmati
  • Fornisce supporto per l'audio
  • Fornisce Bezier, poligono (e trame), quadrato, cerchio, linea, disegno a torta
  • Fornisce supporto alle particelle con emettitori, sprite e manipolatori.
  • Fornisce l'interfaccia con i moduli di Windows attraverso un PictureBox condiviso con superficie.

preparativi

Ci sono diverse cose che devi fare per configurarlo. Eccoli:

Individua le due dll SDL.NET (SdlDotNet.dll e Tao.Sdl.dll) nonché le dll OpenTK e aggiungile ai riferimenti del progetto. Dopo l'installazione, le dll si trovano in Programmi \ SdlDotNet \ bin (su Windows a 32 bit e Programmi (x86) \ SdlDotNet \ bin su Windows a 64 bit. Fare clic con il tasto destro del mouse sulla sezione Riferimenti in Esplora soluzioni, quindi fare clic su Aggiungi riferimento e selezionare la scheda Sfoglia. Viene visualizzata una finestra di dialogo Explorer e dopo aver individuato le DLL selezionare quindi e fare clic su OK.

SDL.NET usa il set SDL di dll e le installa nella cartella lib. Non cancellarli!

Un'ultima cosa, fai clic su Visualizza \ Proprietà in modo da aprire le pagine Proprietà e nella prima scheda (Applicazione) Cambia tipo di output da Applicazione console a Applicazione Windows. Se non lo fai quando il programma viene eseguito per la prima volta e apre la finestra principale di SDL, si aprirà anche una finestra della console.

Ora siamo pronti per iniziare e ho creato una breve applicazione di seguito. Questo unisce rettangoli e cerchi di dimensioni casuali e posizionati sulla superficie della finestra a 1.700 disegnati al secondo con una frequenza dei fotogrammi di 50 fotogrammi al secondo.

Quel 1.700 deriva dall'impostazione del numero disegnato per fotogramma su 17 e dalla visualizzazione dei fotogrammi al secondo nella didascalia della finestra usando Video.WindowCaption. Ogni cornice disegna 17 cerchi e rettangoli riempiti, 17 x 2 x 50 = 1.700. Questa cifra dipende dalla scheda video, dalla CPU ecc. È una velocità impressionante.

// Di David Bolton, http://cplus.about.com
utilizzando il sistema;
utilizzando System.Drawing;
utilizzando SdlDotNet.Graphics;
utilizzando SdlDotNet.Core;
utilizzando SdlDotNet.Graphics.Primitives;
classe pubblica ex1

private const int wwidth = 1024;
const privato int wheight = 768;
schermo di superficie statico privato;
Random statico privato r = new Random ();
public static void Main (string [] args)

Schermo = Video.SetVideoMode (wwidth, wheight, 32, false, false, false, true);
Events.TargetFps = 50;
Events.Quit + = (QuitEventHandler);
Events.Tick + = (TickEventHandler);
Events.Run ();

vuoto statico privato QuitEventHandler (mittente oggetto, arg QuitEventArgs)

Events.QuitApplication ();

vuoto statico privato TickEventHandler (mittente oggetto, argomenti TickEventArgs)

per (var i = 0; i < 17; i++)

var rect = new Rectangle (new Point (r.Next (wwidth- 100), r.Next (wheight-100)),
nuova dimensione (10 + r. successivo (larghezza - 90), 10 + r. successivo (peso - 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));
raggio corto = (corto) (10 + r.Prossimo (peso - 90));
var Circ = new Circle (new Point (r.Next (wwidth- 100), r.Next (wheight-100)), raggio);
Screen.Fill (rect, Col);
Circ.Draw (Screen, CircCol, false, true);
Screen.Update ();
Video.WindowCaption = Events.Fps.ToString ();


Sviluppo orientato agli oggetti

SDL.NET è molto orientato agli oggetti e ci sono due oggetti predefiniti che vengono utilizzati in ogni applicazione SDL.NET.

Il video fornisce metodi per impostare la modalità video, creare superfici video, nascondere e mostrare il cursore del mouse e interagire con OpenGL. Non che faremo OpenGL per un po '.

La classe Events contiene eventi a cui è possibile allegare per leggere l'input dell'utente e altre occorrenze varie.

Qui l'oggetto Video viene utilizzato per impostare le dimensioni e la risoluzione della finestra di gioco (a schermo intero è un'opzione). I parametri per SetVideoMode consentono di modificare questi e 13 sovraccarichi offrono molta varietà. C'è un file .chm (formato di aiuto html di Windows) nella cartella doc che documenta tutte le classi e i membri.

L'oggetto Events ha un gestore di eventi Quit che ti consente di aggiungere la logica di chiusura e dovresti chiamare Events.QuitApplication () per farlo rispondere all'utente che chiude l'applicazione. The Events.Tick è probabilmente il più importante gestore di eventi. Chiama il gestore eventi specificato per ogni frame. Questo è il modello per tutto lo sviluppo SDL.NET.

È possibile impostare la frequenza dei fotogrammi desiderata e il mio riducendo il loop a 5 e cambiando Targetfps a 150, lo facciamo funzionare a 164 frame al secondo. TargetFps è una figura da baseball; mette in ritardo per avvicinarti a quella cifra ma l'Event.Fps è ciò che viene consegnato.

superfici

Come la versione originale non SDL di SDL, SDL.NET utilizza le superfici per il rendering sullo schermo. Una superficie può essere costruita da un file grafico. Esistono un gran numero di proprietà e metodi che rendono possibile leggere o scrivere pixel, nonché disegnare le primitive grafiche, blitare altre superfici, persino scaricare una superficie su un file su disco per acquisire schermate.

SDL> NET fornisce praticamente tutto per consentirti di creare giochi. Esamineremo le varie funzionalità nei prossimi tutorial, quindi passeremo alla creazione di giochi con esso.