• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
irrlicht 1.7
#8
Premetto che non uso irrlicht (se va bene l'avrò provato per un paio di settimane quando stavo scegliendo l'engine da impararmi) e non sono bravo con la oop quindi ci saranno sicuramente mille modi per farlo meglio di come te lo propongo io.

Pensavo di strutturarlo così:
Una classe principale che gestisce le cose che ci sono in quasi tutti i programmi fatti in irrlicht (inizializza device, video driver, scene manager, ecc...).
Una classe per il player.
Una classe per il mondo.
Poi eventualmente si possono fare altre classi per gestire nemici, gui, input (in caso diventasse scomodo fare tutto nella classe player), ecc...

Per adesso ho fatto solo la classe principale, ho provato a farla abbastanza semplice e minimalista. Volendo è riutilizzabile.

File "Inizializza.h"
Codice:
#pragma once
#include <irrlicht.h>
#include <Windows.h>

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

class Inizializza
{
private:
    IrrlichtDevice* mDevice;
    IVideoDriver* mDriver;
    ISceneManager* mSceneMgr;

public:
    Inizializza(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo);
    ~Inizializza(void);
    
    IrrlichtDevice* RetmDevice(void){ return mDevice; }
    IVideoDriver* RetmDriver(void){ return mDriver; }
    ISceneManager* RetmSceneMgr(void){ return mSceneMgr; }
    
    void Errore(LPCWSTR nomeErrore);
    void Device(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo);
    void Driver(void);
    void SceneMgr(void);
};

File "Inizializza.cpp"
Codice:
#include "Inizializza.h"

Inizializza::Inizializza(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo)
{
    Device(larghezza, altezza, fullscrn, titolo);
    Driver();
    SceneMgr();
}


Inizializza::~Inizializza(void)
{
    mDevice->drop();
}

void Inizializza::Errore(LPCWSTR nomeErrore)
{
    MessageBox(NULL, nomeErrore, L"Errore", MB_OK);
}

void Inizializza::Device(int larghezza, int altezza, bool fullscrn, const wchar_t* titolo)
{
    mDevice = createDevice(EDT_DIRECT3D9, dimension2d<u32>(larghezza,altezza), 16U, fullscrn, false, false, 0);
    mDevice->setWindowCaption(titolo);
    if(!mDevice) Errore(L"mDevice");
}

void Inizializza::Driver(void)
{
    mDriver = mDevice->getVideoDriver();
    if(!mDriver) Errore(L"mDriver");
}

void Inizializza::SceneMgr(void)
{
    mSceneMgr = mDevice->getSceneManager();
    if(!mSceneMgr) Errore(L"mSceneMgr");
}

file "main.cpp"
Codice:
#include <irrlicht.h>
#include "Inizializza.h"

using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;


int main()
{
    Inizializza App(800,600,0,L"Finestra di rendering - gioco puorcunicu"); // (larghezza finestra, altezza finestra, modalità fullscreen on/off, nome finestra)
    while(App.RetmDevice()->run())
    {
        App.RetmDriver()->beginScene(true, true, SColor(255,0,0,0));
        App.RetmSceneMgr()->drawAll();
        App.RetmDriver()->endScene();
    }
    return 0;
}


Analizziamo un attimo:

Classe Inizializza:
  • Le variabili sono tutte private, per richiamarli ho creato un metodo apposta per ogni variabile: RetNomeVariabile()
    Ad esempio RetmSceneMgr() per utilizzare lo scene manager al di fuori dalla classe Inizializza.
    E' consigliabile dichiarare tutte le variabili private e richiamarle come ti ho fatto vedere.
  • Ho creato un metodo per gestire gli errori: Errore(LPCWSTR nomeErrore)
    Questo metodo fa apparire una message box con scritto il nome dell'errore.
    Esempio: Errore(L"mDevice"); farà apparire una messagebox con scritto "Errore" nel titolo e "mDevice" come frase (in questo modo capisci che c'è un errore in mDevice).
  • Un metodo per ogni cosa: device, scene manager, video driver e in futuro altro.

main:
  • Si definiscono gli oggetti, per adesso solo per la classe Inizializza (i parametri sono: larghezza scermo, altezza schermo, fullscreen on/of, nome finestra, poi stà a te decidere se togliere o aggiungere roba (tipo se usare opengl o directx, ecc...)
  • Main loop contenente tutte le cose da fare in ciclo (ho preferito metterlo nel main piuttosto che nella classe Inizializza)


Per adesso appare solo una finestra nera. Quando capisci il funzionamento passo a caricare la mappa e via dicendo.
(il programma lo stò facendo di pari passo con quello che ti spiego, quindi è molto probabile che sarà da ritoccare più e più volte)

Come esercizio per vedere se hai capito più o meno come impostare il programma prova a creare una variabile contenente gli fps.
La variabile dev'essere dichiarata privata in Inizializza e si dev'essere in continua variazione (si deve aggiornare ogni volta).
Per avere gli fps ( http://irrlicht.sourceforge.net/docu/cla...2fa408af13 ) se fosse in Inizializza dovresti fare mDevice->getFPS();

Se c'è qualcosa che non hai ben capito o hai qualche problema dimmi pure.
 
Rispondi
  


Messaggi in questa discussione
irrlicht 1.7 - da puorcunicu - 18-10-2010, 05:06 PM
RE: irrlicht 1.7 - da Zapetino - 18-10-2010, 05:13 PM
RE: irrlicht 1.7 - da puorcunicu - 18-10-2010, 05:18 PM
RE: irrlicht 1.7 - da Jonathan Archer - 21-10-2010, 07:54 AM
RE: irrlicht 1.7 - da Zapetino - 18-10-2010, 05:31 PM
RE: irrlicht 1.7 - da steve - 18-10-2010, 08:33 PM
RE: irrlicht 1.7 - da puorcunicu - 19-10-2010, 11:38 AM
RE: irrlicht 1.7 - da steve - 20-10-2010, 05:17 PM
RE: irrlicht 1.7 - da Alche - 19-10-2010, 03:55 PM
RE: irrlicht 1.7 - da KillerZ - 20-10-2010, 07:22 PM
RE: irrlicht 1.7 - da Alche - 20-10-2010, 08:52 PM
RE: irrlicht 1.7 - da steve - 20-10-2010, 10:22 PM
RE: irrlicht 1.7 - da steve - 21-10-2010, 03:22 PM
RE: irrlicht 1.7 - da Jonathan Archer - 22-10-2010, 07:41 PM
RE: irrlicht 1.7 - da Alche - 22-10-2010, 07:50 PM
RE: irrlicht 1.7 - da Jonathan Archer - 22-10-2010, 10:26 PM

Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Irrlicht Engine Chip 9 2,036 01-11-2016, 12:48 AM
Ultimo messaggio: Chip
  Problema camera irrlicht Master Gabriel 12 2,745 18-12-2014, 09:40 AM
Ultimo messaggio: Master Gabriel
  Irrlicht Engine Info e Download friskon 12 6,215 12-04-2013, 11:25 AM
Ultimo messaggio: war10hacker
Question Problema irrlicht con directx Zettamax 0 1,442 23-02-2012, 06:49 PM
Ultimo messaggio: Zettamax
  [TUTORIAL] Irrlicht - Primo Approccio ManHunter 5 3,484 02-01-2012, 07:16 PM
Ultimo messaggio: steve
  [Irrlicht.net] Tutorial 1 - Tradotto Riddick 2 2,189 05-05-2011, 01:02 AM
Ultimo messaggio: ManHunter
  Irrlicht.Net Riddick 8 2,666 10-02-2011, 12:59 AM
Ultimo messaggio: Riddick
  Prima prova con irrlicht steve 4 2,150 10-07-2010, 08:31 PM
Ultimo messaggio: Riddick
  Download dei tool free e guide per Irrlicht Riddick 2 1,936 03-06-2010, 08:48 PM
Ultimo messaggio: Riddick
  Installare Irrlicht su: Dev-C++ e Code::Bocks Riddick 9 3,986 03-06-2010, 02:48 PM
Ultimo messaggio: Riddick

Vai al forum:


Browsing: 2 Ospite(i)