더북(TheBook)

이대로라면 3 × 4 = 12바이트를 써야 RoboCat의 mPosition을 네트워크로 전송할 수 있다. 하지만 이 코드는 고양이가 대부분의 경우 지면에 붙어있을 가능성이 크다는 지식을 활용하지 못하고 있다. 무슨 말이냐면 3D 벡터 mPosition의 Y 좌표가 보통은 0이라는 사실이다. 코드를 고치면 비트 하나에 mPosition이 보통의 값인 0인지, 아니면 다른 값인지 표시할 수 있다.

void OutputMemoryBitStream::WritePos(const Vector3& inVector)
{
    Write(inVector.mX);
    Write(inVector.mZ);
 
    if (inVector.mY == 0)
    {
        Write(true);
    }
    else
    {
        Write(false);
        Write(inVector.mY);
    }
}