Citen: un game engine in C++

Giochi, Programmi, Estensioni in via di sviluppo con GameMaker. Proposte e idee di design.
Rispondi
Avatar utente
Cash
Membro super
Messaggi: 933
Iscritto il: 09/11/2013, 20:40
Uso: GM:Studio 1.4 Pro
Contatta:

Citen: un game engine in C++

Messaggio da Cash »

Non c'entra niente con Game Maker, però potrebbe interessare a qualcuno.
Game Maker è stato il mio primo linguaggio di programmazione, la sua semplicità e la velocità che permette nel creare un qualcosa di giocabile credo siano impareggiabili rispetto agli altri engine che ho provato. Però il GML è troppo limitato, creare codice incasinato è fin troppo facile e la mancanza di alcune feature si fa sentire quando provi altri linguaggi, per questo nasce Citen.
Citen è un game engine fatto in C++ il cui obiettivo è quello di essere semplice e di rendere la creazione di giochi veloce senza dover rinunciare ad usare un linguaggio consolidato.
Tutto si basa sulla classe GameEngine, che si occuperà di creare la finestra/finestre, gestire gli oggetti che devono essere disegnati ed il loro ordine, l'input ed gestire il framerate. Questo codice apre una semplice finestra nera:
Spoiler

Codice: Seleziona tutto

#include <GameEngine>

const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;

GameEngine engine("Window title", WINDOW_WIDTH, WINDOW_HEIGHT);

int main(int argc, char* argv[]){
    while( true ){
        engine.update();
    }
}
Tutte le istanze nel gioco devono derivare dalla classe GameObject, la classe GameObject ha un metodo drawSelf() che si può paragonare all'evento draw di Game Maker: se non viene toccato disegnerà lo sprite assegnato all'oggetto normalmente altrimenti può essere sovrascritto per disegnare altro, disegnare qualcos'altro insieme allo sprite o chissa cosa. Per dire all'engine di disegnare un oggetto è necessario aggiungerlo alla lista degli oggetti che verrano disegnati dall'engine, per fare questo si usa GameEngine.
GameEngine al suo interno contiene un altro oggetto, il draw_controller. Questo è responsabile del disegnare tutti gli oggetti, per aggiungere un oggetto alla lista degli oggetti da disegnare basta usare

Codice: Seleziona tutto

engine.draw_controller.addDrawInstance( puntatore all'oggetto da disegnare );
Questo codice per esempio crea un oggetto e gli fa disegnare un cerchio bianco
Spoiler

Codice: Seleziona tutto

#include <GameEngine>

const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;

GameEngine engine("Window title", WINDOW_WIDTH, WINDOW_HEIGHT);

class Circle: public GameObject{
public:
    Circle(){
    }
    void drawSelf(){
    	// Le funzioni per il disegno richiedono anche la finestra su cui disegnare, chiamando engine.getRenderer si ottiene la finestra principale
        draw_set_color(engine.getRenderer(), 255, 255, 255, 1);
        draw_circle(engine.getRenderer(), 200, 200, 64);
    }
};

int main(int argc, char* argv[]){
    Circle circle;
    engine.draw_controller.addDrawInstance(&circle);
    while( true ){
        engine.update();
    }
}
Questa è solo una piccola parte, ci sono tantissime altre cose da spiegare per fare un gioco completo ma spero si capisca un poco come il tutto è gestito e a cosa punto di creare. Opinioni? mancano ancora tante feature, come implementare il sonoro, collisioni e chissa cos'altro che ancora non so.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 42 ospiti