У меня не очень хорошая привычка обсуждать скриптинг Небулы. Я разделил материал на 4 части: материал Win32 и Init, Main(который обращается с модернизацией и рисованием) и последнее-Конец. WinMain (), Вы знаете то, что это делает...
bool Active-это сигнал для модернизации, чтобы остановиться. EndProgram-это просто делает active=false
Функция WinMain-очень простая и важная
#define WIN32_LEAN_AND_MEAN
#include
bool active = false;
void Init();
void Main();
void End();
// The includes, prototypes and the global.
// WINMAIN
////////////////////////////////////////////////
int WINAPI WinMain(
HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
Init();
active = true;
while(active)
{
Main();
}
End();
return(msg.wParam);
}
В этом действии вы просто размещаете сервер через новый и затем запрашиваете kernelserver inputserver
void Init()
{
KernelServer = new nKernelServer;
Input = (nInputServer *)
KernelServer->New("ninputserver","/sys/servers/input");
GfxServer = (nGfxServer *)ks->New("nglserver","/sys/servers/gfx");
GfxServer->SetDisplayMode("-type(win)-w(640)-h(480)");
//set the display mode ( yes, through a string! ;))
GfxServer->SetClearColor(1.0f,1.0f,1.0f,1.0f);
//if i dont set this the window will be all screwed up
//in my comp, so i left it over here..
GfxServer->OpenDisplay();
//open the window
}
void Main()
{
Input->Trigger();
// This func handles internal events for the inputserver
nInputEvent *InpEvent;
// data block that holds the info about
InpEvent = Input->FirstEvent();
// get the fist event on list (or stack , i dont know) ...
// the func returns NULL if none
if(InpEvent)
// if we have an input event(user has pressed anything)
{
if (InpEvent->IsDisabled()) return;
// if Input is disabled (?)
switch (InpEvent->type)
{
case N_INPUT_KEY_DOWN:
// user has presseda key
{
switch (InpEvent->key)
// what key?
{
case N_KEY_ESCAPE: EndProgram(); break;
// if escape key , call endprogram to
// shut down the progam.
}
}
}
while ((InpEvent = Input->NextEvent(InpEvent)));
// empty the list(or stack) of input events
Input->FlushEvents();// the same as above i think
}
if(!GfxServer->Trigger())
EndProgram();
// hadndles win32 events . when it receives a close message it
// returns 0 ann EndProgram() is called...
}
далее всё закрываем
void End()
{
GfxServer->CloseDisplay();
//close the window
if (GfxServer) GfxServer->Release();
// typical safe release method
if (Input) Input->Release();
// typical safe release method
delete ks;
// delete it unconditionaly!!!!
//(the destructor will take care of everything)
}
Вот в принципе и всё, конец первого тутора. Небула действительно очень сложна для начинающего, просто напишите весь програмный код, тогда возможно вам будет легче разобраться. Я пишу статью про движок в первый раз и поэтому наверное многим будет непонятно, но всё-же лучше чем ничего.