Creare Videogiochi - Game Developer
Richiesta esempi - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Altri Programmi per la Creazione di Videogames (https://www.making-videogames.net/giochi/Forum-Altri-Programmi-per-la-Creazione-di-Videogames)
+--- Forum: Irrlicht Engine (https://www.making-videogames.net/giochi/Forum-Irrlicht-Engine)
+--- Discussione: Richiesta esempi (/thread-Richiesta-esempi)



Richiesta esempi - Nos9110 - 30-08-2010

Ciao ragazzi, qualcuno che ha fatto qualche lavoro (anche banale) e che possa publicare il sorgente? oppure link contenenti la mia richiesta?
Apro questo post in quanto ho provato a compilare alcuni esempi scaricati ed ho notato che ci sono alcuni errori che non riesco a comprendere (anche perchè sono programmi di qualche anno fa e ci sono gli eseguibili, perciò con una versione passata di irrlicht sono stati compilati).
Rilascio comunque un esempio di errore oltre alla mia richiesta in modo che se qualcuno lo sappia risolvere lo possa scrivere.
grazie a tutti

Codice:
scene::IAnimatedMesh* mesh = smgr->getMesh("map/brixiaromana.dmf");
    if(mesh)
            node = smgr->addMeshSceneNode(mesh->getMesh(0));
    // La mappa viene scalata
    mapNode->setScale(vector3df(_mapScaleFactor,_mapScaleFactor,
        _mapScaleFactor));

    // PER RILEVARE LE COLLISIONI
    // Creo il triangle selector
    mapSelector = smgr->createOctTreeTriangleSelector(
            mesh->getMesh(0), mapNode, 128);
Errore
Codice:
27 C:\Downloads\BrixiaRomana\BrixiaRomana\game.cpp `node' undeclared (first use this function)
la linea 27 è node = smgr->addMeshSceneNode(mesh->getMesh(0));


RE: Richiesta esempi - steve - 30-08-2010

con irrlicht c'ho fatto molto poco, e purtroppo non ho salvato niente (cancellato tutto quando ho messo la nuova versione di visual studio).

da quanto vedo l'errore è questo:
node = smgr->addMeshSceneNode(mesh->getMesh(0));
dovrebbe essere:
node = smgr->addMeshSceneNode(mesh);

in oltre ti consiglio di mettere un if(!mesh) che segnala errore, piuttosto che un if(mesh) che esegue se non c'è errore.
ti faccio un esempio per farti capire meglio il perché, almeno secondo me, è meglio fare così.
se fai così:
Codice:
scene::IAnimatedMesh* mesh = smgr->getMesh("map/brixiaromana.dmf");
    if(!mesh)
            cout << "errore, mesh "map/brixiaromana.dmf" non caricata" // oppure ancora meglio, fatto con MessageBox
node = smgr->addMeshSceneNode(mesh->getMesh(0));
si il programma viene eseguito e (per esempio) non trova map/brixiaromana.dmf tu sai subito dov'è l'errore perché ti viene scritto. mentre se lo fai come hai fatto tu non appare la mesh (o almeno è quello che mi immagino che succeda, non ho mai provato).
in caso ci fossero tanti oggetti caricati fai meno faresti meno fatica a trovare l'errore con il modo che ti ho descritto io (almeno imho).

se scarichi sorgenti di giochi ti devi anche assicurare che abbiano usato solo irrlicht, se hanno usato anche un motore fisico (o di ai, o di gui, ecc...) a parte non te li compila se li hai anche tu. inoltre (in caso ti passano tutta la soluzione) devi cambiare i link delle librerie, delle lib (ecc...) con i percorsi in base a dove li hai sul tuo pc. senza contare, come hai detto tu, che è facile che siano stati fatti con versioni vecchie di irrlicht e magari ci sono dei comandi obsoleti.
se il codice non è lunghissimo e gli errori non sono tantissimi posta pure che gli do un occhiata e vedo se ci capisco qualcosa.


RE: Richiesta esempi - Nos9110 - 31-08-2010

(30-08-2010, 11:48 PM)steve Ha scritto: con irrlicht c'ho fatto molto poco, e purtroppo non ho salvato niente (cancellato tutto quando ho messo la nuova versione di visual studio).

da quanto vedo l'errore è questo:
node = smgr->addMeshSceneNode(mesh->getMesh(0));
dovrebbe essere:
node = smgr->addMeshSceneNode(mesh);

in oltre ti consiglio di mettere un if(!mesh) che segnala errore, piuttosto che un if(mesh) che esegue se non c'è errore.
ti faccio un esempio per farti capire meglio il perché, almeno secondo me, è meglio fare così.
se fai così:
Codice:
scene::IAnimatedMesh* mesh = smgr->getMesh("map/brixiaromana.dmf");
    if(!mesh)
            cout << "errore, mesh "map/brixiaromana.dmf" non caricata" // oppure ancora meglio, fatto con MessageBox
node = smgr->addMeshSceneNode(mesh->getMesh(0));
si il programma viene eseguito e (per esempio) non trova map/brixiaromana.dmf tu sai subito dov'è l'errore perché ti viene scritto. mentre se lo fai come hai fatto tu non appare la mesh (o almeno è quello che mi immagino che succeda, non ho mai provato).
in caso ci fossero tanti oggetti caricati fai meno faresti meno fatica a trovare l'errore con il modo che ti ho descritto io (almeno imho).

se scarichi sorgenti di giochi ti devi anche assicurare che abbiano usato solo irrlicht, se hanno usato anche un motore fisico (o di ai, o di gui, ecc...) a parte non te li compila se li hai anche tu. inoltre (in caso ti passano tutta la soluzione) devi cambiare i link delle librerie, delle lib (ecc...) con i percorsi in base a dove li hai sul tuo pc. senza contare, come hai detto tu, che è facile che siano stati fatti con versioni vecchie di irrlicht e magari ci sono dei comandi obsoleti.
se il codice non è lunghissimo e gli errori non sono tantissimi posta pure che gli do un occhiata e vedo se ci capisco qualcosa.
Ho controllato non usa altre lib e l'errore hai visto anche tu qual'è.
Non è un errore di linking di librerie, cmq ti passo il link da cui ho scaricato la demo di questa piccola applicazione.
Link


RE: Richiesta esempi - steve - 31-08-2010

nel codice che hai postato c'è:
node = smgr->addMeshSceneNode(mesh->getMesh(0));
mentre in quello che ho scaricato c'è:
mapNode = smgr->addOctTreeSceneNode(mesh->getMesh(0));

nel codice che ho scaricato visual studio mi segnala un errore alla riga 15 del file game.cpp :
device = createDevice(_driver_type,
dimension2d<s32>(800,600),
32,
_fullscreen);

dovrebbe essere:
device = createDevice(_driver_type,
dimension2d<u32>(800,600),
32,
_fullscreen);



alla riga 260 sempre del file game.cpp :
cbuf->Material.Textures[0] = tex;
dovrebbe essere:
cbuf->Material.setTexture(f, tex);

ho linkato irrlicht.lib con:
#pragma comment(lib, "Irrlicht.lib") //solo per visual studio, altrimenti lo devi fare attraverso le proprietà

e me lo ha compilato senza errori.

però il risultato non è come quello dell'exe già compilato...