我正在努力解决这个问题。我想重载 operator >> 以便将 SoundBuffer 发送到 client ,但 Packet 不支持 Int16* 这是 a.getSamples(); 的类型
sf::Packet& operator >>(sf::Packet& packet, SoundBuffer& a)
{
return packet >> a.getSamples() >> a.getSampleCount();
}
提前感谢您的帮助。
我正在努力解决这个问题。我想重载 operator >> 以便将 SoundBuffer 发送到 client ,但 Packet 不支持 Int16* 这是 a.getSamples(); 的类型
sf::Packet& operator >>(sf::Packet& packet, SoundBuffer& a)
{
return packet >> a.getSamples() >> a.getSampleCount();
}
提前感谢您的帮助。
sf::SoundBuffer::getSamples()
返回一个指向样本的指针。您必须发送/检索单个样本,而不仅仅是指针。
我会尝试这样的事情(未经测试):
sf::Packet& operator << (sf::Packet& packet, SoundBuffer& a) { std::size_t num = a.getSampleCount();
// Send the number of samples first
packet << num;
// Now send the actual samples (repeat as long as we have some left)
for (sf::Int16 *p = a.getSamples(); num; ++p, --num)
packet << p;
}
在客户端,您只需反转整个过程,然后使用sf::SoundBuffer::loadFromMemory()
将数据加载到缓冲区中。
请记住,这是未压缩的,可能会对连接造成负担。因此,您可能希望实现自己的压缩层。您可以在 的文档页面sf::Packet
上找到示例。