#1 

04-03-2007 02:27:53

maitrelame12545
Membres
Avatar de maitrelame12545
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


#2 

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


#3 

04-03-2007 08:40:30

Willikus
Membres
Avatar de Willikus
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 wink


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#4 

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


#5 

04-03-2007 17:04:20

maitrelame12545
Membres
Avatar de maitrelame12545
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 !!! big_smile

A+


Codeur elewendyl

Hors ligne


#6 

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


#7 

04-03-2007 17:56:32

maitrelame12545
Membres
Avatar de maitrelame12545
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


#8 

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();


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

Hors ligne


#9 

09-07-2007 14:07:53

maitrelame12545
Membres
Avatar de maitrelame12545
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


#10 

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.


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é
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
141 invités en ligne
membre en ligne: -
RSS Feed