Я создаю прототип игры и подключил несколько многопользовательских функций. Я столкнулся с проблемой с отправкой поплавка по проводам, хотя. Любопытно, сталкивался ли кто-нибудь с этим, или может сказать мне, в чем проблема.
Структура, которую я отправляю, выглядит следующим образом:
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 будет работать, но я хотел бы знать, почему это не работает, как прежде, чем я его кодирую.