[ < ]

[ > ]

 

[ << ]

[ Up ]

[ >> ]

 

 

 

 

[Top]

[Contents]

[Index]

[ ? ]

4.3.1.1 Simple fejlállomány

Mindig jó ötlet a definíciókat és a deklarációkat a fejállomonáyokban tárolni elkülönítve a forrásfájloktól. Néhány eseteben ez kötelező is. Itt bemutatjuk eg egy egyszerű Crystal Space alkalmazás fejálományát. Bár ez nem feltétlenül kötelező, egy oszátlyt fogunk használni az alkalazáslogika egybefoglalására. a mi kis “simple.h' fejállományunk így néz ki:

 

#ifndef __SIMPLE_H__
#define __SIMPLE_H__

#include <crystalspace.h>

class Simple : public csApplicationFramework, public csBaseEventHandler
{
private:
  csRef<iEngine> engine;
  csRef<iLoader> loader;
  csRef<iGraphics3D> g3d;
  csRef<iKeyboardDriver> kbd;
  csRef<iVirtualClock> vc;

  void ProcessFrame ();
  void FinishFrame ();

public:
  Simple ();
  ~Simple ();

  void OnExit ();
  bool OnInitialize (int argc, char* argv[]);

  bool Application ();
};

#endif // __SIMPLE1_H__

A 'Simple' osztályban eltárolunk egypár referenciát azokról a fontos objektumokról, amikre gyarkanvan szükségünk. Így nem kell mindenegyes alkalommal újra lekérni, amikor zükésgünk vanrájuk. Másrészt van egy konstruktorunk, ami elcégzi majd ezen változók inicializálását, egy destruktorunk, ami leálíta az alkalazást, és egy inicializáló függvényün, mai azért felelős, hogy teljesen felállítsa a Crystal Space-t alkalmazásunk számára.

Megjegyezzük, hogy gyors pointereket (csRef<>) használunk ezenreferenciák tárolására. Ez könnybé teszt a referenciaszámlálás kezelését. hagyjuk, hogy a gyors pointer foglalkozzon ezzel helyettünk.

A 'simple.cpp' forrásfájlba a következőt helyezzük:

 

#include "simple.h"

CS_IMPLEMENT_APPLICATION

Simple::Simple ()
{
  SetApplicationName ("CrystalSpace.Simple1");
}

Simple::~Simple ()
{
}

void Simple::ProcessFrame ()
{
}

void Simple::FinishFrame ()
{
}

bool Simple::OnInitialize(int argc, char* argv[])
{
  if (!csInitializer::RequestPlugins(GetObjectRegistry(),
    CS_REQUEST_VFS,
    CS_REQUEST_OPENGL3D,
    CS_REQUEST_ENGINE,
    CS_REQUEST_FONTSERVER,
    CS_REQUEST_IMAGELOADER,
    CS_REQUEST_LEVELLOADER,
    CS_REQUEST_REPORTER,
    CS_REQUEST_REPORTERLISTENER,
    CS_REQUEST_END))
    return ReportError("Failed to initialize plugins!");

  if (!RegisterQueue(GetObjectRegistry()))
    return ReportError("Failed to set up event handler!");

  return true;
}

void Simple::OnExit()
{
}

bool Simple::Application()
{
  if (!OpenApplication(GetObjectRegistry()))
    return ReportError("Error opening system!");

  g3d = CS_QUERY_REGISTRY(GetObjectRegistry(), iGraphics3D);
  if (!g3d) return ReportError("Failed to locate 3D renderer!");

  engine = CS_QUERY_REGISTRY(GetObjectRegistry(), iEngine);
  if (!engine) return ReportError("Failed to locate 3D engine!");

  vc = CS_QUERY_REGISTRY(GetObjectRegistry(), iVirtualClock);
  if (!vc) return ReportError("Failed to locate Virtual Clock!");

  kbd = CS_QUERY_REGISTRY(GetObjectRegistry(), iKeyboardDriver);
  if (!kbd) return ReportError("Failed to locate Keyboard Driver!");

  loader = CS_QUERY_REGISTRY(GetObjectRegistry(), iLoader);
  if (!loader) return ReportError("Failed to locate Loader!");

  Run();

  return true;
}

/*---------------*
 * Main function
 *---------------*/
int main (int argc, char* argv[])
{
  return csApplicationRunner<Simple>::Run (argc, argv);
}

Ez majdnem a lehető legegyszerűbb alkalmazás és teljes egészében használhatatlan. Ne is indítsd el az operációsrendszereden, mert mert nem tudod leállítani az alkalmazást, mivel nincs rá mód, hogy megálítsuk az alkalmazást ha egyszer elkezdett futni.

Bár ez z alkalmazás jelenelg használhatatatlan, sok hasznos jellemzője van, mai a későbbiekben nagyon hasznos lesz. Itt egy rövvid összefoglalás ajelenlegi jellemzőiről:

Mielőtt elkezdenénk használhatóbb fejleszteni az alkalmazást, vessünk egy pillantást arra, mi történik itt pontosan.

Mielőtt ármit is tennénk, a szükséges fejállományok beeépítése után, elsőként használnunk kell néhány makrót. a CS_IMPLEMENT_APPLICATION makró alapvető minden Crystal Space-t használó alkalmazásnak. Ez biztossá teszi, hogy a a mai() függvény helyesen lesz linkelve ésmeghíva inden platform számára.

A csInitializer::RequestPlugins() használni fogja a kofigurációs fájlt (amitmi nem használunk ebben a tutoriálban), hogy a parancssor ls a lekért pluginok helyesen töltődjenek be. A parancssor élvezi a legnagyobb prioritást, ezután jön a konfigurációs fájl és végül a lekért pluginok.

Ezzel befejeződött az inicializációs szekció.

A Simple::Application() függvényben meghívjuk a csInitializer::OpenApplication() függvényt. Ez elküldi a 'cscmdSystemOpen' körüzenetet minen esemény sort lehallgató komponensnek. Az egyik lehallgatóplugin a 3D renderer ami meg fognyitni egy ablakot (vagyelérhetővéteszi a grafikát egy nem grafikus operációs rendszeren).

Ezután lekérjük az objectum nyilvántartót, hogy lekérhessük az összes későbbiekebnhaszánlni kívánt közös objektumot, és afő osztályunkban eltároljuka ezeket referenciákat. Mivel mi a csRef<> vagy gyors pointer tipust haszánljuk, nem kell aggódnunk az IncRef() és a DecRef(9 kézi meghívása miatt.

Végül elindítuk az alap főhurkot a Run() meghívásával


[ < ]

[ > ]

 

[ << ]

[ Up ]

[ >> ]

This document was generated using texi2html 1.76.