O primeiro exemplo de uso do framework, ele pode ser encontrado na seção download, aparentemente pode parecer complexo, mais é um metodo similar que grandes engines como a Ogre3D usam. Abaixo segue o exemplo.
#include "Wintermoon.h"
using namespace Wintermoon;
class BasicApp : public Application, public EventReceiver
{
protected:
bool mRunning;
Root* mRoot;
GraphicsManager* mGraphics;
InputManager* mInput;
private:
// herdado de EventReceiver
void onKeyPress(SDL_keysym& keysym)
{
// Ao pressionado a tecla ESC
if (keysym.sym == SDLK_ESCAPE)
{
mRunning = false;
}
}
// onQuit herdado de EventReceiver
// um dos mais importantes metodos
// quando ele é chamado indica que a SDL
// recebeu um sinal para finalizar a aplicação
// ou quando o ussuario clica em fechar da janela
void onQuit()
{
mRunning = false;
}
public:
// main, herdado de Application
// e o ponto de começo da sua aplicação
// args é um vector de strings que contem
// os comandos de linha (antigos int argc, char** argv)
int main(std::vector<std::string>& args)
{
try
{
// Cria dispositivo raiz
mRoot = Root::CreateDevice();
mGraphics = mRoot->GetGraphicsDriver();
mInput = mRoot->GetInputManager();
// Inicializa o video (Cria a janela)
mGraphics->Init("Wintermoon", 640, 480, 16, false);
// Inicializa a entrada de eventos
// (teclado, mouse, joystick)
mInput->Init();
// Adiciona essa classe como
// receptora de eventos
// herdada de EventReceiver
mInput->AddReceiver(this);
mRunning = true;
// Loop principal
for (; mRunning; SDL_Delay(10))
{
// beginDraw deve ser sempre chamada
// antes de qualquer rotina de desenho
mGraphics->beginDraw();
// o metodo Logic deve ser sempre chamado
// sempre no inicio do loop
mInput->Logic();
// Aqui vai seu Codigo
// endDraw deve ser sempre chamada
// após o termino dos desenhos
mGraphics->endDraw();
}
// destroi o sistema
// ele automaticamente se encarrega
// de liberar toda memoria antes de sair
delete mRoot;
}
catch (Exception& e)
{
fprintf(stderr, "%s\n", e.what());
}
return 0;
}
} app;
Tags: Tutoriais // 1 Comment »