Bonjour,
Je suis en train de développer mon appli 3D.
J'ai fais une page login.cpp, character.cpp, et akhynia.cpp (qui contient le main).
Dans akhynia.cpp j'ai ce code
#include "Login.h"
#include "Character.h"
#include <stdio.h>
#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "Irrlicht.lib")
int main() {
login();
if (login() == 2) { character(); }
}
truc simple.
Et pour les 2 autres j'ai le même code sauf que pour character.cpp j'ai qu'un seul affichage de test.
Lorsque je valide mon login et mot de passe en cas d'erreur j'ai rien c normal je n'ai pas configurer ce cas encore, mais lorsque c'est bon j'ai 2x ma fenêtre de login.
Quelqu'un peut m'éclairer svp.
Merci et bonne soirée.
Dernière modification par ayboangelus (16-12-2008 22:26:15)
Hors ligne
yop ^^
regarde ta condition :p
" if(login() == 2) "
tu crée une première fois login en début puis une deuxième fois dans la condition
et euh login renvoie une variable que tu le maitte dans une condition ? ^^
sinon je pense que tu devraient passer ton codes en c++ sa seraient plus simple si tu veut faire une application asse complexe
car na pas l'aire de l'être
sinon si j'est pas "capter" se que tu expliquai poste ton codes source je peut toujours aider
Hors ligne
non c'est tout a fait ça.
je veux lancer le fichier login.cpp, et s'il est validé passer au fichier character.cpp
Comme j'apprend le c++ sur le tas ce n'est pas tout le temps facile ^^. Peut tu m'aider ?
En fait à la fin si le login est bon j'ai un return 2;
Mais apparement cela ne fonctionne pas comme ça. Vu que je n'ai plus de dev c++ sur le projet, je dois apprendre en attendant d'en trouver un autre.
Hors ligne
et bien il te suffi de ne garder que ta condition ...
int main()
{
if (login() == 2)
{
character();
}
}
ou alors tu fait des class ( je peut t'expliquer le fonctionnement si tu veut ses un peut chiant a comprend quant on viens du C *-* )
mais je te propose plutôt de faire un schémas de l'application que tu veut faire ... sa m'arrive de temps en temps dans faire un sa aide beaucoup
pour donner un exemple celle de mon application même si se n'est pas très exacte ( je sais pas trop comment mis prend avec les socket )
voila ^^ sinon je suppose que tu connait le site du zero :p ...
et sinon je risque de poster mon codes source tu pourras t'en inspirer
Hors ligne
Je te remercie pour ce bout de code ça marche presque parfaitement. Par contre il m'ouvre une nouvelle fenêtre. Je suis sur que cela vient du fait que je recréé mon moteur 3d et que je remets une boucle de rendu.
Y'a t-il une solution pour ça.
#include "Login.h" using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace gui; int login() { stringc varlogin,varpass; IrrlichtDevice* device = createDevice(video::EDT_OPENGL,core::dimension2d<s32>(1024,768), 32); video::IVideoDriver* driver = device->getVideoDriver (); scene::ISceneManager *scenegraph = device->getSceneManager (); //On récupère un pointeur vers la gui. IGUIEnvironment* env = device->getGUIEnvironment(); IGUIEnvironment *gui = scenegraph->getGUIEnvironment(); //On crée une instance contenant la police. gui::IGUIFont *font = env ->getFont("font.png"); //affichage du texte gui::IGUIStaticText* login = env->addStaticText(L"Login",core::rect<s32>(710,190,900,220), false); gui::IGUIEditBox *loginbox = env->addEditBox(L"", core::rect<s32>(610,230,890,280)); gui::IGUIStaticText* pass = env->addStaticText(L"Mot de passe",core::rect<s32>(660,320,900,350), false); gui::IGUIEditBox *passbox = env->addEditBox(L"", core::rect<s32>(610,360,890,410)); gui::IGUIButton *boutonval = gui->addButton(core::rect<s32>(670,480,830,530), 0, -1, L"Validez"); //Mise en place de la police d'écriture pour les zones indiquées. login->setOverrideFont(font); loginbox ->setOverrideFont(font); pass ->setOverrideFont(font); passbox ->setOverrideFont(font); boutonval ->setOverrideFont(font); //On charge la page d'intro video::ITexture *image = driver->getTexture ("intro.jpg"); //On teste que ça a marché if (image == 0) { return 0; } //On met un titre dans la barre fenetre windows wchar_t titre[100]; swprintf(titre, 100, L"Akhynia"); device->setWindowCaption(titre); //boucle de rendu while(device->run()) { driver->beginScene(true, true, SColor(255,100,101,140)); driver->draw2DImage(image, core::position2d<s32> (0,0)); env->drawAll(); scenegraph->drawAll (); driver->endScene(); if (boutonval->isPressed() == true) { varlogin = loginbox->getText(); varpass = passbox->getText(); stringc loginbase = "aybo"; stringc passbase = "test"; if (varlogin == loginbase && varpass == passbase) return 2; } } device->drop (); return 1; }
Ca c'est mon login
#include "Character.h" using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace gui; int character() { IrrlichtDevice* device = createDevice(video::EDT_OPENGL,core::dimension2d<s32>(1024,768), 32); video::IVideoDriver* driver = device->getVideoDriver (); scene::ISceneManager *scenegraph = device->getSceneManager (); //On récupère un pointeur vers la gui. IGUIEnvironment* env = device->getGUIEnvironment(); IGUIEnvironment *gui = scenegraph->getGUIEnvironment(); //On crée une instance contenant la police. gui::IGUIFont *font = env ->getFont("font.png"); //affichage du texte gui::IGUIStaticText* login = env->addStaticText(L"test réussi avec succès",core::rect<s32>(710,190,900,220), false); login->setOverrideFont(font); //On met un titre dans la barre fenetre windows wchar_t titre[100]; swprintf(titre, 100, L"Akhynia"); device->setWindowCaption(titre); //boucle de rendu while(device->run()) { driver->beginScene(true, true, SColor(255,100,101,140)); env->drawAll(); scenegraph->drawAll (); driver->endScene(); } device->drop (); return 1; };
Et ça c'est ma création de perso.
Hors ligne
et bien oui
et pourquoi tu ne ferais pas appelle au caractère depuis le login ?
ou alors faire une fonction pour crée et faire le rendue de la fenêtre et dans cette fonction tu fait appelle au rendue ?
exemple :
class login { public: login(irrDevice*device) : Device(device) { creation du menu } ~login{ guiEnvironement->clear() } int draw(){ tu retourn ta valeur } private: IrrDevice *Device; ...... } class caratere { public: caratere(irrDevice*device) : Device(device) { ..... } ~caratere{ guiEnvironement->clear(); smgr->clear(); driver->removeAllTextures(); } int draw(){ tu retourn ta valeur } private: IrrDevice *Device; ...... } class core { public: core() { creation de la fentre ... LOGIN = new login(device); } ~core() //destructeur { device->closeDevice(); } void draw() { bool truc = true; while() { rendue de la fentre int plop = LOGIN->draw(); if(truc && plop == 2) { delete LOGIN; LOGIN = NULL; Carac = new caratere(device); true = false; } f(Carac) Carac->draw(); } } private: IrrDevice *device; login *LOGIN; caratere *Carac; ...... } int main() { core CORE; core.draw(); }
voila j'espere que je n'est rien oublier
tu me dit quand sa marche ... uo pas tout compris ^^
Dernière modification par Magun (17-12-2008 18:36:41)
Hors ligne
oula je test ça de suite, c'est ce qu'il me semblait que ma structure de programme était foireuse.
Pour la compréhension de ton code, google m'aidera je pense c'est un super copain.
Je test et merci en tout cas pour ton aide. Je te tiens au courant.
-- EDIT 1 -- Euh finalement c'est la panique mdr. J'ai 182 erreurs du jamais vu. Faut que je reprenne ça.
-- EDIT 2 -- Je vais me trouver un codeur, c'est une catastrophe. tant pis mon équipe de graphiste, modeleur, et musicien sont au chomage technique pour quelque temps. :'(
J'ai comprit le code dans ces grandes lignes, mais impossible à comprendre le fonctionnement.
Dernière modification par ayboangelus (17-12-2008 19:55:25)
Hors ligne
et bien je peut te faire un code utilisable si tu le souhaite ( core et juste les fonction d'appele de login et caractere )
néanmoins il faudrait d'abord que tu comprenne comment exploiter une class :p sans cela tu n'iras pas bien loin ^^
regarde se tuto que l'explique http://www.siteduzero.com/tutoriel-3-11 … e-1-2.html
sinon poste ton nouveaux code et je te corrige tes erreur
j'est un peut de temps libre ( rendue qui seras peut-être prochainement la vidéo d'introduction de mon application ... tres long avec ma becanne ...)
ehum a ui j'avais pas pensser a qu'elle que chause sur l'avans dernier poste :s
tu pouvais faire un device->closeDevice();
avans le device->drope(); a la fin du login()
et aussi j'est oublier d'ecrire le " ; " a la fin de la class :
class truc
{
public:
.....
};
Dernière modification par Magun (17-12-2008 23:57:25)
Hors ligne
pour le ; c'est bon j'ai corrigé, pour le tuto des classes j'ai comprit sur la gestion de mon personnage ca va etre super pratique par contre pour mon appli je vois pas comment faire c'est ca le soucis.
Tiens je te file mon petit bout de code, ya rien de particulier pour l'instant. Si tu me le met comme tu l'a marqué j'arriverais peut être mieux à comprendre.
Merci par avance.
http://rapidshare.com/files/174587342/aragon.rar.html
Bonne soirée ^^
PS: j'ai essayé avec le bout de code que tu m'a donné à mettre après le rendu et cela ne change rien.
PS2: le nom que tu as est celui d'un ancien projet. Aragon n'existe plus en 3D, c'est Akhynia maintenant.
Dernière modification par ayboangelus (18-12-2008 17:33:19)
Hors ligne
voila je tes fait un code utilisable dans l'état
j'espère que se seras tout :p
login.h :
#ifndef LOGIN_H #define LOGIN_H #include <irrlicht.h> using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace gui; class login { public: login(IrrlichtDevice* Device) { device = Device; driver = device->getVideoDriver(); scenegraph = device->getSceneManager (); env = device->getGUIEnvironment(); IGUIFont *font = env->getFont("font.png"); if(font) env->getSkin()->setFont(font); env->addStaticText(L"Login",core::rect<s32>(710,190,900,220), false); loginbox = env->addEditBox(L"", core::rect<s32>(610,230,890,280)); env->addStaticText(L"Mot de passe",core::rect<s32>(660,320,900,350), false); passbox = env->addEditBox(L"", core::rect<s32>(610,360,890,410)); boutonval = env->addButton(core::rect<s32>(670,480,830,530), 0, -1, L"Validez"); image = driver->getTexture("intro.jpg"); } ~login() { env->clear(); scenegraph->clear(); driver->removeAllTextures(); } char draw() { if(image) driver->draw2DImage(image, core::position2d<s32> (0,0)); if (boutonval->isPressed() == true) { varlogin = loginbox->getText(); varpass = passbox->getText(); stringc loginbase = "aybo"; stringc passbase = "test"; if (varlogin == loginbase && varpass == passbase) return 2; } } private: stringc varlogin,varpass; ITexture *image; IVideoDriver *driver; IrrlichtDevice *device; ISceneManager *scenegraph; IGUIEnvironment *env; IGUIButton *boutonval; IGUIEditBox *loginbox; IGUIEditBox *passbox; }; #endif
coreApp.h:
#ifndef IRR_CORE #define IRR_CORE #include "Character.h" class coreApp { public: coreApp(); ~coreApp(); void draw(); protected: private: IrrlichtDevice *device; IGUIEnvironment* env; IVideoDriver *driver; ISceneManager *scenegraph; login *LOGIN; character *Carac; }; #endif
caoreApp.cpp:
#include "coreApp.h" coreApp::coreApp() { device = createDevice(EDT_OPENGL,dimension2d<s32>(1024,768), 32); driver = device->getVideoDriver(); scenegraph = device->getSceneManager(); env = device->getGUIEnvironment(); LOGIN = new login(device); } coreApp::~coreApp() { device->closeDevice(); } void coreApp::draw() { while(device->run()) { driver->beginScene(true, true, SColor(255,100,101,140)); env->drawAll(); scenegraph->drawAll(); static bool next = true; if(LOGIN && LOGIN->draw() == 2) { delete LOGIN; LOGIN = false; Carac = new character(device); } if(Carac) Carac->draw(); driver->endScene(); } device->drop(); }
charactere.h:
#ifndef CHARACTER_H #define CHARACTER_H #include "Login.h" class character { public: character(IrrlichtDevice* Device); ~character(); char draw(); private: IrrlichtDevice* device; }; #endif
charactere.cpp
#include "Character.h" character::character(IrrlichtDevice* Device) { device = Device; IVideoDriver* driver = device->getVideoDriver (); ISceneManager *scenegraph = device->getSceneManager (); //On récupère un pointeur vers la gui. IGUIEnvironment* env = device->getGUIEnvironment(); IGUIStaticText* login = env->addStaticText(L"test reussi avec succes",rect<s32>(710,190,900,220),false); wchar_t titre[100]; swprintf(titre, 100, L"Akhynia"); device->setWindowCaption(titre); } character::~character() { } char character::draw() { }
akhynia/main .cpp:
#include "coreApp.h" int main() { coreApp *coreApli = new coreApp(); coreApli->draw(); }
voila et la prochaine fois stp
recopie pas bêtement les codes que l'on donne, je t'avais écris le principe du code ...
quand tu voie des commentaire dans un code sans les // avants ou entre /* et */ ses que se n'est pas forcement un code compilable
a par sa et bien tu avais écris des caractère spéciaux dans une chaine de caractère ( é, è,@, .... ) ne peuve être écrire seulement avec une fonction qui est qu'elle que par dans le forum
voila voila bonne chance pour le futur de ton aplication
Hors ligne
Merci pour ton code, mais j'ai une erreur:
character.cpp(22) : error C4716: 'character::draw' : doit retourner une valeur
et si je met :
char character::draw() { return 1; }
J'ai ces erreurs encore pire à comprendre :
coreApp.obj : error LNK2019: symbole externe non résolu "__declspec(dllimport) class irr::IrrlichtDevice * __cdecl irr::createDevice(enum irr::video::E_DRIVER_TYPE,class irr::core::dimension2d<int> const &,unsigned int,bool,bool,bool,class irr::IEventReceiver *,char const *)" (__imp_?createDevice@irr@@YAPAVIrrlichtDevice@1@W4E_DRIVER_TYPE@video@1@ABV?$dimension2d@H@core@1@I_N22PAVIEventReceiver@1@PBD@Z) référencé dans la fonction "public: __thiscall coreApp::coreApp(void)" (??0coreApp@@QAE@XZ) 1>C:\aragon\projetencours\Akhynia\Debug\Akhynia.exe : fatal error LNK1120: 1 externes non résolus
Alors à mon avis ce que je retourne n'est pas bon
Hors ligne
char charactere::draw()
{
return 1;
}
devrait marcher ....
du moins sur mon compilateur sa marche ...
uhm ....
essaye de rajouter :
#pragma warning(default:4716)
dans charactere.cpp
Hors ligne
J'ai essayé avec un
char charactere::draw()
{
return device;
}
comme il est mis dans le coreApp.ccp mais j'ai cette erreur:
character.cpp(21) : error C2440: 'return' : impossible de convertir de 'irr::IrrlichtDevice *' en 'char'
et avec ta ligne pour le warning ca fonctionne pas mieux. :'(
Vais jamais y arriver.
Dernière modification par ayboangelus (20-12-2008 14:26:46)
Hors ligne
ses normale faut pas retourner un device tu fait n'importe quoi la :p
faut bien faire un return variable; et pas device ><
et bien écoute pour ma par je suit sous code::blocks ... migre donc vers celui-la il est très bien, comparer a visual c++ apparemment il n'est pas très au point puis que beaucoup de personne on des problèmes avec
Hors ligne
Bon alors j'ai pas d'erreurs ils se compile bien ,donc je vais rester sur code::block
Par contre si je compile en release en fait tout passe sans condition en fait j'ai mon login et mon character à la suite. C'est bizard.
Dernière modification par ayboangelus (20-12-2008 20:07:41)
Hors ligne
ah tu voulais pas comme sa ?
dsl ^^
Hors ligne
En fait j'ai créé un login.cpp et ca m'a réglé le problème.
Tout fonctionne actuellement. A part le fait que je n'ai pas mon image de fond, ce qui est du à mon avis à une histoire de plan.
Je vais approfondir le sujet. Merci beaucoup en tout cas.
On Peut clore le sujet. ^^
J'ai trouver un topic de DragonBlood, concernant la gestion des plan avec cette commande:
IGUIElement* guiRoot=guiEnv->getRootGUIElement( ) ;
guiRoot->bringToFront(Ma_guiElement);
J'ai essayé vite fait de l'intégrer mais marche pas, je réssayerais demain.
Bonne soirée
Dernière modification par ayboangelus (20-12-2008 23:59:41)
Hors ligne
merci et de rien
pour les plan tu passe soient par le topic de DragonBlood ( par initialisation des image de la gui
soient tu peut faire un driver->draw2DImage(driver->getTexture("img.jpg"), ..................
et suivent dans l'ordre ou tu les mais il se super pose enfin bon
Dernière modification par Magun (21-12-2008 01:47:14)
Hors ligne
Pour ce que est du driver->draw2DImage(driver->getTexture("img.jpg"), je comprend le principe tu fait apparaitre au fur et à mesure des plans tes images. Mais pour mon appli je ne vois pas comment faire car le rendu est dans la partie core, et l'image dans le login et d'après ce que je comprend le core.cpp charge le rendu et ensuite c'est le le rendu du login qui est enclenché.
Donc pour moi cela ne peut pas fonctionner, mais comme je suis un newbie ^^ je me trompe peut être.
Quand au code de DragonBlood, je n'ai que des erreurs je n'arrive pas à le faire fonctionner correctement.
Hors ligne
et bien tu peut changer le mode de rendue de core
rendre d'abord le login
puis la scène et la gui
sinon tu tu peut faire plus simple
exemple
IGUImage *img = guienv->addImage(rect<s32>(0,0,800,600);
img->setImage(diver->getTexture("plop.tga"));
img->setAlphatruc(true);
img->setScaleImage(true);
IGUImage *img2 = guienv->addImage(rect<s32>(0,0,800,600);
img2->setImage(diver->getTexture("plop.tga"));
img2->setAlphatruc(true);
img2->setScaleImage(true);
de cette façon l'img s'affiche d'abord puis ses img2 donc img2 est par dessus img
et tu peut changer la texture a nimport qu'elle moment sans que sa change qu'elle que chose ... seul problème ses de rajouter une img entre 2 ( poste de dragonblood )
Hors ligne
Youpiiiiiii ca fonctionne, je vais pouvoir continuer mon projet maintenant que mes problèmes sont résolus.
Un grand merci pour ta patience ^^.
Au plaisir j'espère.
Hors ligne
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 49 invités en ligne Aucun membre connecté RSS Feed |