Jeu réseau

Signaler
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008
-
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
-
Salut,

J'essaye de mettre une fonction réseau à mon jeu.

Dans l'initialisation, j'ai mis un thread qui initialise soit un serveur ou soit un client.

Ensuite, je sais pas trop comment faire pour envoyer la position du personnage au cleint ou au serveur.

Si je le fais à chaque frame ça fait beaucoup non ???
Donc si je crée un thread qui tout les x temps envoie la pos du joueur aux autres c'est bon ou pas ???

Merci d'avance pour votre aide !

5 réponses

Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
1
en meme tps ca depend de ce que tu veux faire....
Parce que si tu ne le fais pas a chaque frames tu va voir le perso adverse en saccades....par contre ca demande beaucoup de tps si tu l'envois a chaque frames...

Le mieux donc c'est que le client donne la future position de son perso au serveur (ou l'inverse) et que le serveur calcule lui meme la trajectoire ensuite le serveur ne renverra sa future position que lorsque qu'il aura atteind la precedente...

Pour les cours reseau--->Msdn

Pour la reception des position je ferais un thread du genre:

DWORD WINAPI RecvData(LPVOID param)
{
for(;;)
{
memset(recvbuf,0,sizeof recvbuf);
recv( m_socket, recvbuf,1024, 0 );
}
}
des qu'un message est recu celui ci est stocké dans recvbuf a toi de le recuperer ensuite...

Et aussi pense a bien synchroniser les 2 PC sinon bonjour les degats!
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Salut,

J'ai fait une ébauche :

DWORD WINAPI ThreadServerProc(LPVOID lpParam)
{
while (1)
{
int posZ=g_Camera.m_vPosition.z;
int posX=g_Camera.m_vPosition.x;

sprintf(data,"%d %d",posZ, posX);

send(csock_server, data, sizeof(data), 0); // envoie de donnee

if (sortie==1)		break;

Sleep(20);
}
return 0;
}


c'était juste pour savoir si c'était correct ou pas ???
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
1
euh la tu fais un thread pour envoyer des données...ca sert a rien c'est plutot pour les recevoir! send n'est pas bloquante c'est recv() qui est bloquante

Parce ce que justement la t'envois tout le tps les données ca va pas par rapport a ce que j'ai dit avant il faut que t'envois que quand t'as besoin
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

Oui mais pour l'instant c'est un peu compliqué ce que tu me proposes...
Si j'envoie tout les 20 ms la positions du perso c'est génant ???
Messages postés
546
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
9 janvier 2008
1
tout depend de ce que tu veux faire !!