160 likes | 278 Views
Lisukekomponentit. Kari Timonen. Johdanto. Lisukekomponentit ohjelmistoarkkitehtuurin osana Lisukekomponenttien lataaminen Lisukekomponenttien ja ohjelmistokehyksen kommunikointi Lisukekomponenttien käyttäminen pelimoottoreissa OGRE 3D AMX Mod X Yhteenveto.
E N D
Lisukekomponentit Kari Timonen
Johdanto • Lisukekomponentit ohjelmistoarkkitehtuurin osana • Lisukekomponenttien lataaminen • Lisukekomponenttien ja ohjelmistokehyksen kommunikointi • Lisukekomponenttien käyttäminen pelimoottoreissa • OGRE 3D • AMX Mod X • Yhteenveto
Lisukekomponentit ohjelmistoarkkitehtuurin osana • Ohjelmistojen osien uudelleenkäyttö • Yhteinen ohjelmistoarkkitehtuuri • Ohjelmistokehys • Aukkoja tuotekohtaisia täydennyksiä varten
Lisukekomponentit ohjelmistoarkkitehtuurin osana • Ohjelmistokehystyyppejä • Abstrakti • Muunneltava • Koottava • Plugin
Lisukekomponenttien lataaminen • Lataaminen usein ajonaikaisesti • Käännetään erillään ohjelmistokehyksestä • Käytetään apuna DLL-tiedostoja (Dynamic Link Library) • Lataamisesta huolehtii Plugin Manager -komponentti • DLL-tiedoston lataaminen • Funktioiden lataaminen • Lisukekomponentin luominen • Ohjelmistokehys käyttää lisukekomponentin funktioita
Lisukekomponenttien lataaminen • DLL-tiedosto, jossa esitellään funktio addNumbers • #include <windows.h> • // Export this function • extern "C" __declspec(dllexport) double AddNumbers(double a, double b); • // DLL initialization function • BOOL APIENTRY • DllMain(HANDLE hModule, [[DWORD]] dwReason, LPVOID lpReserved) • { • return TRUE; • } • // Function that adds two numbers • double AddNumbers(double a, double b) • { • return a + b; • }
Lisukekomponenttien lataaminen • DLL-tiedosto, joka käyttää funktiota addNumbers • #include <windows.h> • #include <stdio.h> • // Import function that adds two numbers • extern "C" __declspec(dllimport) double AddNumbers(double a, double b); • int main(int argc, char **argv) • { • double result = AddNumbers(1, 2); • printf("The result was: %f\n", result); • return 0; • }
Lisukekomponenttien lataaminen • Lisukekomponentin poistaminen myös mahdollista • Muistin vapauttaminen ohjelman suorituksen loppuessa • Lisukekomponentin uudelleen lataaminen myös mahdollista • Hyödyllistä kehitysvaiheessa
Lisukekomponenttien ja ohjelmistokehyksen kommunikointi • Usein ohjelmistokehys kutsuu lisukekomponentin funktioita • Kommunikointi myös toiseen suuntaan mahdollista • Plugin Manager -komponentin välityksellä • Suoraan ohjelmistokehyksen kutsuminen • Ohjelmistokehys tulee riippuvaiseksi lisukekomponenteista • Plugin Manager -komponentin kautta kommunikointi turvallisempaa • Suoraan ohjelmistokehyksen kutsuminen tehokkaampaa
Lisukekomponenttien käyttäminen pelimoottoreissa • Modulaarisen pelimoottorin rakenne
OGRE 3D • Grafiikkamoottori • Oliopohjainen (C++) • Laajennettavissa lisukekomponenttien avulla
AMX Mod X • Lisukekomponentti Half-Life-pohjaisten pelipalvelinten hallintaan • Laajentaa esim. pääkäyttäjän toimintoja ja statistiikan keräämistä • Vaatii toimiakseen erillisen Metamod-komponentin • Voidaan laajentaa omilla lisukekomponenteilla • Lisukekomponentit kirjoitetaan Pawn-skriptikielellä • Esimerkki
Yhteenveto • Lisukekomponentit ohjelmistoarkkitehtuurin osana • Lisukekomponenttien lataaminen • Lisukekomponenttien ja ohjelmistokehyksen kommunikointi • Lisukekomponenttien käyttäminen pelimoottoreissa • OGRE 3D • AMX Mod X
Lähteet AMX Mod X -verkkosivusto, 2008. http://www.amxmodx.org [25.3.2008] Dickheiser, M., C++ for game programmers, second edition. Charles River Media, Boston, Massachusetts, USA, 2007. Koskimies, K., Mikkonen, T., Ohjelmistoarkkitehtuurit. Talentum, Helsinki, Suomi, 2005. Lewis, M., Jacobson J., Game engines in scientific research. Communications of the ACM, 45,1(2002) . [Myös http://delivery.acm.org/10.1145/510000/502288/p27-lewis.pdf]. OGRE manual, 2008. http://www.ogre3d.org/docs/manual/manual_4.html#SEC4 [25.3.2008]