2011-09-29 6 views
0

J'ai un jeu de hockey avec des maillets fonctionnant sur iphone/ipad. Le serveur contrôle toute la physique et envoie à l'autre périphérique la position du maillet du serveur et le client envoie au serveur sa position de maillet.Box2D et GameCenter multijoueur

Cette partie fonctionne correctement, le problème concerne la rondelle. Becuase est beaucoup trop rapide et le serveur est l'onde qui envoie le message. Le problème est que le puck est un corps b2_dynamic et le serveur envoie au client où se trouve le puck. J'ai mis à jour pour envoyer la position au client chaque image sur gameLoop, mais le problème est que cela ne coule pas correctement. Les mouvements des maillets sont corrects, mais avec la rondelle un peu bizarre, je pense que c'est dû à la vitesse linéaire de la rondelle.

Qu'est-ce que c'est de gérer l'information:

[gamedelegate movePuckToX:messageData->x andY:messageData->y andAngle:0.0]; 


- (void) sendMovePuck { 
MessageMovePuckTo message; 
message.message.messageType = kMessageTypeMovePuck; 

float_t pX = puck->GetPosition().x; 
float_t pY = puck->GetPosition().y; 

message.x = pX; 
message.y = pY; 

NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageMovePuckTo)];  
[self sendData:data];  
} 


-(void)movePuckToX:(float_t)x andY:(float_t)y andAngle:(float_t)ang 
{ 
    lastPuckReceivedPosition = b2Vec2(x, [self getScreenSize].height/32 - y); 
    puck->SetAwake(false);   
    puck->SetTransform(b2Vec2(x, [self getScreenSize].height/32 - y), 0);   
    puck->SetLinearVelocity(b2Vec2(0,0)); 
} 

Quel est le meilleur d'envoyer la position de la rondelle au client? Des idées ou des idées? Je ne peux pas réussi à résoudre ce :(

+0

Juste une petite réflexion, ne devriez-vous pas calculer la physique sur le client à la place? Et laissez simplement le serveur envoyer la force qui a été définie sur la rondelle? – Mikael

+0

Je suis d'accord avec les commentaires ci-dessus. La chose à propos du client serveur est que vous devriez envoyer le moins de données possible aux clients. Le calcul doit être effectué du côté client. – xuanweng

Répondre

0

Vous devriez essayer d'utiliser l'estime et de calculer sur chaque côté. Utilisez l'hôte juste pour distribuer la dernière pièce.

En navigation, l'estime est le processus de le calcul de sa position actuelle à l'aide d'une position préalablement déterminée, ou de fixer, et de faire progresser cette position sur la base des vitesses connues ou estimées au fil du temps écoulé, et bien sûr.

http://en.wikipedia.org/wiki/Dead_reckoning