04-03-2007 02:27:53
- maitrelame12545
- Membres

- Date d'inscription:
- Messages: 51
- IP: 76.80.53.159
- Courriel
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+
Codeur elewendyl
Hors ligne
04-03-2007 07:54:04
- dark calculator
- Membres
- Date d'inscription:
- Messages: 153
- IP: 82.67.201.37
- Courriel
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
04-03-2007 08:40:30
- Willikus
- Membres

- Date d'inscription:
- Messages: 150
- IP: 86.214.189.239
- Courriel Site web
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
Athlon 3000+ / 1024Mo PC3200 /8800 GTS
Hors ligne
04-03-2007 13:01:19
- katsankat
- Membres
- Date d'inscription:
- Messages: 43
- IP: 86.209.83.9
- Courriel
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;
}Hors ligne
04-03-2007 17:04:20
- maitrelame12545
- Membres

- Date d'inscription:
- Messages: 51
- IP: 76.80.53.159
- Courriel
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+
Codeur elewendyl
Hors ligne
04-03-2007 17:22:29
- khayyam
- Membres
- Date d'inscription:
- Messages: 25
- IP: 81.50.194.232
- Courriel Site web
maitrelame12545 Ecris:
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
04-03-2007 17:56:32
- maitrelame12545
- Membres

- Date d'inscription:
- Messages: 51
- IP: 76.80.53.159
- Courriel
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*
Codeur elewendyl
Hors ligne
09-07-2007 10:38:35
- gp2mv3
- Membres
- Date d'inscription:
- Messages: 103
- IP: 81.247.2.247
- Courriel Site web
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
09-07-2007 14:07:53
- maitrelame12545
- Membres

- Date d'inscription:
- Messages: 51
- IP: 90.36.75.93
- Courriel
pour ton information, c'est moi tenmaCA sur le sdz, celui qui t'as donne ce code
Codeur elewendyl
Hors ligne
09-07-2007 14:53:21
- gp2mv3
- Membres
- Date d'inscription:
- Messages: 103
- IP: 81.247.2.247
- Courriel Site web
Ha ok dsl je savais pas.
Merci pour ton aide.
Hors ligne



