私はプロトタイプゲームを構築しており、いくつかのマルチプレイヤー機能を接続しています。私はワイヤで浮動小数点を送信する問題に遭遇しています。誰かがこの問題を抱えているかどうか不思議で、問題が何であるか教えてください。iOS GameKit:ワイヤで浮動小数点を送信する
私が送っ構造は次のようになります。ワイヤーの上にそれを送信し
struct TRMessageHeader {
int length;
int code;
};
struct TRMessagePushPeer {
struct TRMessageHeader header;
float force;
};
私のコードは次のようになります。
- (void) testFloat:(int) floatValue {
struct TRMessagePushPeer message = {0};
message.header.code = TRMessageCodePushPeer;
message.header.length = sizeof(message);
message.force = floatValue;
NSArray * peers = [_session peersWithConnectionState:GKPeerStateConnected];
NSData * data = [NSData dataWithBytes:&message length:sizeof(message)];
NSError * error = NULL;
[_session sendData:data toPeers:peers withDataMode:GKSendDataReliable error:&error];
}
私の受信コードは次のようになります。
- (void) onPeerPushed:(NSNotification *) notification {
NSDictionary * userInfo = [notification userInfo];
NSData * messageData = [userInfo objectForKey:@"messageData"];
struct TRMessagePushPeer * message = (struct TRMessagePushPeer *)[messageData bytes];
NSLog(@"peer sent float :%f",message->force);
}
私が持っている問題は、testFloat:0.4573を呼び出すと、受信側ピアの浮動小数点値は0です。私が呼び出した場合testFloat:1.3458の場合、受信側ピアのフロート値は1です。
ピア受信コードでは丸められているようですが、理由はわかりません。
フロートをIEEE754でエンコードしても問題ありませんが、エンコードする前にこれが動作しない理由を知りたいと思います。
AH!それは完全にそれでした。私はそれを見落として信じられない。ありがとう! – gngrwzrd