#0 

04-03-2007 03:27:53

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

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


#1 

04-03-2007 08:54:04

dark calculator
Abonné
Date d'inscription: 25-02-2007
Messages: 153

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


#2 

04-03-2007 09:40:30

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

Moi je récupère les caractère par IEvent Receiver :


IEventReceiver pour chat:

Code:

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 wink


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#3 

04-03-2007 14:01:19

katsankat
Membre
Date d'inscription: 24-02-2007
Messages: 43

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:

Code:

#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


#4 

04-03-2007 18:04:20

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

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 !!! big_smile

A+


Codeur elewendyl

Hors ligne


#5 

04-03-2007 18:22:29

khayyam
Membre
Date d'inscription: 04-03-2007
Messages: 25
Site web

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


#6 

04-03-2007 18:56:32

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

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


#7 

09-07-2007 12:38:35

gp2mv3
Abonné
Date d'inscription: 27-06-2007
Messages: 103
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();


Mon projet sous Irrlicht : RoM : Rebuilding on Mars
N'hésitez pas à y faire un tour wink

Hors ligne


#8 

09-07-2007 16:07:53

maitrelame12545
Membre
Date d'inscription: 28-11-2006
Messages: 51

pour ton information, c'est moi tenmaCA sur le sdz, celui qui t'as donne ce code


Codeur elewendyl

Hors ligne


#9 

09-07-2007 16:53:21

gp2mv3
Abonné
Date d'inscription: 27-06-2007
Messages: 103
Site web

Ha ok dsl je savais pas.
Merci pour ton aide.


Mon projet sous Irrlicht : RoM : Rebuilding on Mars
N'hésitez pas à y faire un tour wink

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
18 invités en ligne
Aucun membre connecté
RSS Feed