Hallo Ihr alle!
Ich bin ein Irrlicht-anfänger und in C++ versuche ich gerade die "Vererbung" zu verstehen. Daher möchte ich von euch wissen, ob ich auf dem richtigen Weg bin.
Ich habe die in diesem thema angesprochenen Klassen "CIntro,CMainMenu und CGame" von einer Basis-Klasse CGameState abgeleitet. Funktionieren tut das ganze, jetzt will ich nur wissen, ob das auch optimal ist, oder ich hier noch was verbessern kann.
Zuerst die C_Gamestates.h
Zitat:
#include "main.h"
class C_GameStates : public IEventReceiver
{
protected:
IrrlichtDevice* m_device;
IVideoDriver* m_driver;
ISceneManager* m_smgr;
char* m_Text;
public:
C_GameStates();
~C_GameStates();
bool OnEvent(SEvent event);
virtual int Init();
virtual int Exit();
virtual int Render();
};
//////////////////////////////////////////////////////////////////////
class C_Intro : public C_GameStates
{
public:
C_Intro();
~C_Intro();
bool OnEvent(SEvent event);
public:
int Init();
int Exit();
int Render();
};
//////////////////////////////////////////////////////////////////////
class C_MainMenu : public C_GameStates
{
public:
C_MainMenu();
~C_MainMenu();
bool OnEvent(SEvent event);
public:
int Init();
int Exit();
int Render();
};
//////////////////////////////////////////////////////////////////////
class C_Game : public C_GameStates
{
public:
C_Game();
~C_Game();
bool OnEvent(SEvent event);
public:
int Init();
int Exit();
int Render();
};
Und die C_Gamestates.cpp sieht so aus:
Zitat:
#include <iostream.h>
#include "C_GameStates.h"
C_GameStates::C_GameStates()
{
}
C_GameStates::~C_GameStates()
{
}
bool C_GameStates::OnEvent(SEvent event)
{
if (event.EventType == EET_KEY_INPUT_EVENT &&
event.KeyInput.Key == KEY_ESCAPE &&
event.KeyInput.PressedDown == true)
{
m_device->closeDevice();
}
return false;
}
int C_GameStates::Init()
{
cout << m_Text << " wurde initialisiert\n";
m_device = createDevice(EDT_DIRECT3D9, dimension2d<s32>(SCREEN_WIDTH, SCREEN_HIGHT), 32,
true, false, false, this);
if (m_device == 0)
return 1;
m_device->setWindowCaption(L"GameState Test");
m_driver = m_device->getVideoDriver();
m_smgr = m_device->getSceneManager();
return 0;
}
int C_GameStates::Render()
{
cout << m_Text << " wird gerendert\n";
while(m_device->run())
{
m_driver->beginScene(true, true, video::SColor(0,200,200,200));
m_smgr->drawAll();
m_driver->endScene();
}
return 0;
}
int C_GameStates::Exit()
{
cout << m_Text <<" wird geschlossen\n";
m_device->drop();
return 0;
}
//////////////////////////////////////////////////////////////////////
//------------------------Klasse CIntro ANFANG----------------------------
C_Intro::C_Intro()
{
m_Text = "Intro";
}
C_Intro::~C_Intro()
{
}
int C_Intro::Init()
{
C_GameStates::Init();
m_smgr->loadScene("media\\test.irr");
m_smgr->addCameraSceneNodeFPS();
return 0;
}
int C_Intro::Render()
{
C_GameStates::Render();
return 0;
}
int C_Intro::Exit()
{
C_GameStates::Exit();
return 0;
}
bool C_Intro::OnEvent(SEvent event)
{
C_GameStates::OnEvent(event);
return false;
}
//------------------------Klasse CIntro ENDE----------------------------
//////////////////////////////////////////////////////////////////////
//------------------------Klasse CMainMenue ANFANG----------------------------
C_MainMenu::C_MainMenu()
{
m_Text = "MainMenu";
}
C_MainMenu::~C_MainMenu()
{
}
int C_MainMenu::Init()
{
C_GameStates::Init();
m_smgr->loadScene("media\\test.irr");
m_smgr->addCameraSceneNodeFPS();
return 0;
}
int C_MainMenu::Render()
{
C_GameStates::Render();
return 0;
}
int C_MainMenu::Exit()
{
C_GameStates::Exit();
return 0;
}
bool C_MainMenu::OnEvent(SEvent event)
{
C_GameStates::OnEvent(event);
return false;
}
//------------------------Klasse CMainMenue ENDE----------------------------
//////////////////////////////////////////////////////////////////////
//------------------------Klasse CGame ANFANG----------------------------
C_Game::C_Game()
{
m_Text = "Game";
}
C_Game::~C_Game()
{
}
int C_Game::Init()
{
C_GameStates::Init();
m_smgr->loadScene("media\\test.irr");
m_smgr->addCameraSceneNodeFPS();
return 0;
}
int C_Game::Render()
{
C_GameStates::Render();
return 0;
}
int C_Game::Exit()
{
C_GameStates::Exit();
return 0;
}
bool C_Game::OnEvent(SEvent event)
{
C_GameStates::OnEvent(event);
return false;
}
//------------------------Klasse CGame ENDE----------------------------
Dann noch die main.h
Zitat:
#include <irrlicht.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
#pragma comment(lib, "Irrlicht.lib")
#define SCREEN_WIDTH 1024
#define SCREEN_HIGHT 768
und die main.cpp
Zitat:
#include "main.h"
#include "C_GameStates.h"
#include <iostream.h>
int main()
{
C_GameStates* GS;
GS = new C_Intro;
GS->Init();
GS->Render();
GS->Exit();
GS = new C_MainMenu;
GS->Init();
GS->Render();
GS->Exit();
GS = new C_Game;
GS->Init();
GS->Render();
GS->Exit();
delete GS;
return 0;
}
Wie gesagt, mich würde jetzt euere Meinung zu den Klassen interresieren.