Bonjour !
J'aimerais creer le module de chat dans mon mmorpg mais je ne sais pas comment faire pour recuperer un texte entrer par les utilisateurs...
Comme ca il entre --> clique sur send --> Envoie de la chaine via winsock.
On m'a dit que c'est impossible avec un editbox...
Merci !
a+
Hors ligne
salut,
On m'a dit que c'est impossible avec un editbox...
a bon je ne voit pas pourquoi mais bon sinon tu peut faire en recuperant les touches du clavier via IEventReceiver (tu trouverat un exemple dans l'exemple de terrain rendering de irrlicht), tu les mets dans un static text et un buffer et tu envoie quand il fait entrer.
Mais je pense qu'un edit box peut fonctionner tres bien mais bon, Est ce qu'on t'a dit pourquoi ca ne marcherait pas ?
a+
dark calculkator
Hors ligne
Moi je récupère les caractère par IEvent Receiver :
IEventReceiver pour chat:
class MyEventReceiver : public IEventReceiver { public: virtual bool OnEvent(SEvent event) { if (camera != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT) { switch(event.KeyInput.Key) { } } if (event.EventType == irr::EET_KEY_INPUT_EVENT && event.KeyInput.PressedDown) { switch(event.KeyInput.Key) { case KEY_KEY_A: if(enter==1) { if(shift==0) strcat(chat_scan, "a"); if(shift==1){ strcat(chat_scan, "A"); shift=0; } break; case KEY_KEY_B: if(enter==1) { if(shift==0) strcat(chat_scan, "b"); if(shift==1){ strcat(chat_scan, "B"); shift=0; } } break; case KEY_KEY_C: if(enter==1) { if(shift==0) strcat(chat_scan, "c"); if(shift==1){ strcat(chat_scan, "C"); shift=0; } } break; case KEY_KEY_D: if(enter==1) { if(shift==0) strcat(chat_scan, "d"); if(shift==1){ strcat(chat_scan, "D"); shift=0; } } break; case KEY_KEY_E: if(enter==1) { if(shift==0) strcat(chat_scan, "e"); if(shift==1){ strcat(chat_scan, "E"); shift=0; } } break; case KEY_KEY_F: if(enter==1) { if(shift==0) strcat(chat_scan, "f"); if(shift==1){ strcat(chat_scan, "F"); shift=0; } } break; case KEY_KEY_G: if(enter==1) { if(shift==0) strcat(chat_scan, "g"); if(shift==1){ strcat(chat_scan, "G"); shift=0; } } break; case KEY_KEY_H: if(enter==1) { if(shift==0) strcat(chat_scan, "h"); if(shift==1){ strcat(chat_scan, "H"); shift=0; } } break; case KEY_KEY_I: if(enter==1) { if(shift==0) strcat(chat_scan, "i"); if(shift==1){ strcat(chat_scan, "I"); shift=0; } } break; case KEY_KEY_J: if(enter==1) { if(shift==0) strcat(chat_scan, "j"); if(shift==1){ strcat(chat_scan, "J"); shift=0; } } break; case KEY_KEY_K: if(enter==1) { if(shift==0) strcat(chat_scan, "k"); if(shift==1){ strcat(chat_scan, "K"); shift=0; } } break; case KEY_KEY_L: if(enter==1) { if(shift==0) strcat(chat_scan, "l"); if(shift==1){ strcat(chat_scan, "L"); shift=0; } } break; case KEY_KEY_M: if(enter==1) { if(shift==0) strcat(chat_scan, "m"); if(shift==1){ strcat(chat_scan, "M"); shift=0; } } break; case KEY_KEY_N: if(enter==1) { if(shift==0) strcat(chat_scan, "n"); if(shift==1){ strcat(chat_scan, "N"); shift=0; } } break; case KEY_KEY_O: if(enter==1) { if(shift==0) strcat(chat_scan, "o"); if(shift==1){ strcat(chat_scan, "O"); shift=0; } } break; case KEY_KEY_P: if(enter==1) { if(shift==0) strcat(chat_scan, "p"); if(shift==1){ strcat(chat_scan, "P"); shift=0; } } else { if(armee==0) armee=1; else armee = 0; } break; case KEY_KEY_Q: if(enter==1) { if(shift==0) strcat(chat_scan, "q"); if(shift==1){ strcat(chat_scan, "Q"); shift=0; } } break; case KEY_KEY_R: if(enter==1) { if(shift==0) strcat(chat_scan, "r"); if(shift==1){ strcat(chat_scan, "R"); shift=0; } } break; case KEY_KEY_S: if(enter==1) { if(shift==0) strcat(chat_scan, "s"); if(shift==1){ strcat(chat_scan, "S"); shift=0; } } break; case KEY_KEY_T: if(enter==1) { if(shift==0) strcat(chat_scan, "t"); if(shift==1){ strcat(chat_scan, "T"); shift=0; } } break; case KEY_KEY_U: if(enter==1) { if(shift==0) strcat(chat_scan, "u"); if(shift==1){ strcat(chat_scan, "U"); shift=0; } } break; case KEY_KEY_V: if(enter==1) { if(shift==0) strcat(chat_scan, "v"); if(shift==1){ strcat(chat_scan, "V"); shift=0; } } break; case KEY_KEY_W: if(enter==1) { if(shift==0) strcat(chat_scan, "w"); if(shift==1){ strcat(chat_scan, "W"); shift=0; } } break; case KEY_KEY_X: if(enter==1) { if(shift==0) strcat(chat_scan, "x"); if(shift==1){ strcat(chat_scan, "X"); shift=0; } } break; case KEY_KEY_Y: if(enter==1) { if(shift==0) strcat(chat_scan, "y"); if(shift==1){ strcat(chat_scan, "Y"); shift=0; } } break; case KEY_KEY_Z: if(enter==1) { if(shift==0) strcat(chat_scan, "z"); if(shift==1){ strcat(chat_scan, "Z"); shift=0; } } break; case KEY_SPACE: if(enter==1) strcat(chat_scan, " "); break; case KEY_NUMPAD0: if(enter==1) strcat(chat_scan, "0"); break; case KEY_NUMPAD1: if(enter==1) strcat(chat_scan, "1"); break; case KEY_NUMPAD2: if(enter==1) strcat(chat_scan, "2"); break; case KEY_NUMPAD3: if(enter==1) strcat(chat_scan, "3"); break; case KEY_NUMPAD4: if(enter==1) strcat(chat_scan, "4"); break; case KEY_NUMPAD5: if(enter==1) strcat(chat_scan, "5"); break; case KEY_NUMPAD6: if(enter==1) strcat(chat_scan, "6"); break; case KEY_NUMPAD7: if(enter==1) strcat(chat_scan, "7"); break; case KEY_NUMPAD8: if(enter==1) strcat(chat_scan, "8"); break; case KEY_PERIOD: if(enter==1) { if(shift==0) strcat(chat_scan, "."); } break; case KEY_DECIMAL : if(enter==1) { strcat(chat_scan, "."); } break; case KEY_SHIFT: if(enter==1) { if(shift==0) shift=1; else shift=0; } break; case KEY_COMMA: if(enter==1) { if(shift==0) strcat(chat_scan, ","); if(shift==1) { strcat(chat_scan, "?"); shift=0; } } break; case KEY_KEY_4: if(enter=1) strcat(chat_scan, "'"); break; case KEY_RETURN: if(enter==0){ enter=1; strcat(chat_scan, pseudo); strcat(chat_scan, " : "); } else { rakClientInterface->RPC("PrintMessage", chat_scan, (strlen(chat_scan)+1)*8, HIGH_PRIORITY, RELIABLE_ORDERED, 0, false); strcpy(chat_scan, chat_clear); enter=0; } break; } } if ((event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)) { } if ((event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_RMOUSE_PRESSED_DOWN)) { } if ((event.EventType == EET_MOUSE_INPUT_EVENT && event.MouseInput.Event == EMIE_RMOUSE_LEFT_UP)) { } return false; } };
Ca me permet d'écrire sommairement, avec une gestion des Majuscules un peu foireuse (Une sorte de Key-Lock qui se déloque une fois le caractère entré). Seul GROS problème, je n'arrive pas a gerer l'éffacement du dernier caractère avec la touche Retour :s
Ce chat tourne sous RakNet
Hors ligne
Salut,
"on" s'est trompé.
Pour récupérer le texte d'un IGUIEditBox il faut invoquer sa méthode getText().
De plus l' évènement EGET_EDITBOX_ENTER intervient lorsqu'on appuie sur entrée dans l' EditBox.
Un exemple, assez court:
#include <irrlicht.h> using namespace irr; using namespace core; using namespace video; using namespace gui; /*------------------------------------------------------------------------------ Evenements ------------------------------------------------------------------------------*/ class MyEventReceiver : public IEventReceiver { public: MyEventReceiver(IGUIListBox* Console, IGUIEditBox* TxtSaisie) { saisie = TxtSaisie; listbox = Console; } virtual bool OnEvent(SEvent event) { if (event.EventType == EET_GUI_EVENT) { if (event.GUIEvent.EventType == EGET_EDITBOX_ENTER) { listbox->addItem(saisie->getText()); saisie->setText(L""); return true; } } return false; } private: IGUIEditBox* saisie; IGUIListBox* listbox; }; /*------------------------------------------------------------------------------ Point d'entree ------------------------------------------------------------------------------*/ int main(int argc, char **argv) { s32 HEIGHT=200; s32 WIDTH =200; IrrlichtDevice* device = createDevice(EDT_OPENGL, dimension2d<s32>(HEIGHT, WIDTH), 24, false, false, false); if (!device) return 1; IVideoDriver* driver = device->getVideoDriver(); scene::ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* igui = device->getGUIEnvironment(); IGUIFont* font = igui->getFont("../../media/fonthaettenschweiler.bmp"); igui->getSkin()->setFont(font); // Listbox pour stocker les messages IGUIListBox *Console = igui->addListBox(rect<s32>(0,0, WIDTH, HEIGHT-20), 0, 1, true); //Zone de saisie position2d<s32> pos (0,HEIGHT-20); dimension2d<s32> size ( WIDTH, 20); IGUIEditBox* TxtSaisie = igui->addEditBox ( L"saisie", rect<s32>(pos,size), false, NULL, -1); TxtSaisie->setOverrideColor (video::SColor(255,10,200,10)); MyEventReceiver *receiver = new MyEventReceiver(Console, TxtSaisie); device->setEventReceiver(receiver); while (device->run()) { driver->beginScene(true, true, 0); igui->drawAll(); driver->endScene(); } device->drop(); delete receiver; return 0; }
Dernière modification par katsankat (04-03-2007 14:08:02)
Hors ligne
Super !
Ca marche genial !
Mon seul probleme maintenant c'est que winsock2 accepte seulement les chaine de char et non les etrange wchar_t...
Sinon le reste marce super !!!
A+
Hors ligne
maitrelame12545 :
winsock2 accepte seulement les chaine de char et non les etrange wchar_t...
winsock gère des buffers. Tu peux mettre ce que tu veux dans tes buffers, que ça soit des char, des wchar_t ou autre chose.
Hors ligne
Mais quand j'utilise send(soc, (saisie->getText), sizeof((saisie->getText)), 0);
A la compilation je recois l'erreur -> Invalid convertion from const char* to wchar_t*
Hors ligne
Tien voici un code de conversion :
// wchar_t* -> char
stringc charconvert = L"blalalala";
const char* test;
test = charconvert.c_str();
//char -> wchar_t
stringw charconvert = "blalalala";
wchar_t* test;
test = charconvert.c_str();
Hors ligne
pour ton information, c'est moi tenmaCA sur le sdz, celui qui t'as donne ce code
Hors ligne
Ha ok dsl je savais pas.
Merci pour ton aide.
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 34 invités en ligne Aucun membre connecté RSS Feed |