North = 0, Right = 1, East = 2, Down = 3, South = 4, Left = 5, West = 6, Mask = 7, Mask = 7, Running = 128, ValueMask = 135
現在の向きと反対の向きを取得するには
dir ^ 0x4
とする。 最上位ビットとのXORを取れば、半分を中心にした対称の値が得られる。 純粋な向きは0〜7までなので3ビットで表現できる。 この場合、3ビットで100(2進数)となり、最上位ビットの値は4となる。
bool running = ((dir & Direction.Running) != 0); で得られる。
純粋な向きだけを得たい場合、Runningなどのフラグが邪魔になる。 そういう場合は
public static Direction RunningOff(Direction dir) { //runningフラグがあるかチェック bool running = ((dir & Direction.Running) != 0); if (running)//runningフラグがあるなら dir -= Direction.Running;//runningフラグを取り除く return dir; }
とすればRunningフラグを取り除ける。
North: Y-1 Right: X+1, Y-1 East: X+1 Down: X+1, Y+1 South: Y+1 Left: X-1, Y+1 West: X-1 Up: X-1, Y-1;